以下是我的一段处理socket事件的操作,当我server端(SCO OpenServer)发包给client端(windows)时,发现,如果是小的数据文件就没问题,但如果大的数据文件就只能接收到前面2-3个数据包(FD_READ触发了2-3次),后面的FD_READ就不再触发了,哪位高手能帮忙看看,哪可能出错?谢谢了!
DWORD WINAPI ThreadSocketProc(LPVOID lpParameter)
{
WSAEVENT wsaEvent;
WSANETWORKEVENTS NetworkEvents;
DWORD RecvBytes;
DWORD Flags;
char buf[MAXBUFFERSIZE];
// Create an event object for use in WSAEventSelect. 
wsaEvent = WSACreateEvent();
WSAEventSelect(sfd/*OVERLAPPED*/,wsaEvent,FD_READ|FD_CLOSE); //monitor serial event
while(WaitForSingleObject(ExitSocketEvent,0) == WAIT_TIMEOUT)
{
RecvBytes = 0;
Flags = 0;
if(WSAWaitForMultipleEvents(1,&wsaEvent,TRUE,WSA_INFINITE,FALSE) == WSA_WAIT_FAILED)
{
printf("\t\nWSAWaitForMultipleEvents ExitAll\n");
SetEvent(ExitAllEvent);
            continue;
}
WSAEnumNetworkEvents(sfd,wsaEvent,&NetworkEvents); if(NetworkEvents.lNetworkEvents & FD_READ)
{
if(NetworkEvents.iErrorCode[FD_READ_BIT] != 0)
{
//error
SetEvent(ExitAllEvent);
continue;
}
SetEvent(hSocketReady);
//Read data from socket connection
//char* myp = buf;
int nread = 0;
if ((nread = ReadSocketStr(buf)) <= 0)
            {
        SetEvent(ExitAllEvent);
               continue;
            } 

WSAResetEvent(wsaEvent);
}
} WSACloseEvent(wsaEvent); SetEvent(ExitedSocketEvent); return 0;
}// read string stream from serial connection
int ReadSocketStr(char *buf)
{
    WSABUF dataBuf;
DWORD recvBytes = 0;
DWORD flag = 0;
dataBuf.len = MAXBUFFERSIZE;
dataBuf.buf = buf;  
DWORD bytesTransferred = 0;
memset(buf,0,sizeof(buf)); if (WSARecv(sfd, &dataBuf, 1, &recvBytes, &flag,
            &readWSAOl, NULL) == SOCKET_ERROR)
{
if (WSAGetLastError() != ERROR_IO_PENDING)
{
printf("WSARecv: recvBytes = %d, Error = %d",recvBytes,GetLastError());
return 0;
}
}
WSAWaitForMultipleEvents(1,&readWSAOl.hEvent,TRUE,WSA_INFINITE,FALSE);
WSAResetEvent(readWSAOl.hEvent);
if(!WSAGetOverlappedResult(sfd,&readWSAOl,&bytesTransferred,TRUE,&flag))
{
printf("\t\nWSAGetOverlappedResult == FALSE\n");
return 0;
}
buf[recvBytes]='\0';
//printf("Received %d bytes, data [%s] from server\n",recvBytes,buf);
printf("Received %d bytes from server\n\n",recvBytes);
return recvBytes;
}