接收组播数据的代码如下:发生的错误时10040,请问怎么解决?
WSAOVERLAPPED olRecv;
WSAEVENT gheventOlSock;
WSAEVENT eventArray[2];
WSABUF buffRecv;
DWORD dwRet,dwNumBytes,dwFlags;
int nWSAError;
DWORD iNumBytes = 0;
int lpFromlen; struct sockaddr_in saRemote;
char szError[81];
gheventOlSock = WSACreateEvent();
eventArray[0] = gheventOlSock;
ZeroMemory(&olRecv,sizeof(WSAOVERLAPPED));
olRecv.hEvent= gheventOlSock;
buffRecv.len = iLength;
buffRecv.buf = pData;
fReceiving = TRUE;
while (TRUE)
{
dwFlags = 0;
dwNumBytes = 0;
lpFromlen = sizeof(saRemote);
/*WSARecv(Socket,&buffRecv,1,&dwNumBytes,&dwFlags,&olRecv,NULL)*/
if ((dwRet = WSARecvFrom(Socket,&buffRecv,1,&dwNumBytes,&dwFlags,
(SOCKADDR *)&saRemote,&lpFromlen,&olRecv,NULL)) == SOCKET_ERROR)
{
nWSAError = WSAGetLastError();
if (nWSAError != ERROR_IO_PENDING)
{
sprintf(szError,"WSARecvFrom failed with error %d\n",nWSAError);
MessageBox(NULL,szError,"Client",MB_OK);
return SOCKET_ERROR;
}
}
if (WSAWaitForMultipleEvents(1,eventArray,FALSE,WSA_INFINITE,FALSE) == WSA_WAIT_FAILED)
{
sprintf(szError,"WSAWaitForMultipleEvents failed1 %d\n", WSAGetLastError());
MessageBox(NULL,szError,"Client",MB_OK);
}
WSAResetEvent(eventArray[0]);
if (WSAGetOverlappedResult(Socket,&olRecv,&dwNumBytes,FALSE,&dwFlags) == TRUE)
{
if (dwNumBytes == 0)
break;
}
else
{
sprintf(szError,"WSAGetOverlappedResult 111111111failed with error %d\n", WSAGetLastError());
MessageBox(NULL,szError,"Client",MB_OK);
return SOCKET_ERROR;
}
buffRecv.len -= dwNumBytes;
iNumBytes = iNumBytes + dwNumBytes;
if (buffRecv.len == 0)
break;
else
buffRecv.buf += dwNumBytes;
}
fReceiving = FALSE;
return iNumBytes;
WSAOVERLAPPED olRecv;
WSAEVENT gheventOlSock;
WSAEVENT eventArray[2];
WSABUF buffRecv;
DWORD dwRet,dwNumBytes,dwFlags;
int nWSAError;
DWORD iNumBytes = 0;
int lpFromlen; struct sockaddr_in saRemote;
char szError[81];
gheventOlSock = WSACreateEvent();
eventArray[0] = gheventOlSock;
ZeroMemory(&olRecv,sizeof(WSAOVERLAPPED));
olRecv.hEvent= gheventOlSock;
buffRecv.len = iLength;
buffRecv.buf = pData;
fReceiving = TRUE;
while (TRUE)
{
dwFlags = 0;
dwNumBytes = 0;
lpFromlen = sizeof(saRemote);
/*WSARecv(Socket,&buffRecv,1,&dwNumBytes,&dwFlags,&olRecv,NULL)*/
if ((dwRet = WSARecvFrom(Socket,&buffRecv,1,&dwNumBytes,&dwFlags,
(SOCKADDR *)&saRemote,&lpFromlen,&olRecv,NULL)) == SOCKET_ERROR)
{
nWSAError = WSAGetLastError();
if (nWSAError != ERROR_IO_PENDING)
{
sprintf(szError,"WSARecvFrom failed with error %d\n",nWSAError);
MessageBox(NULL,szError,"Client",MB_OK);
return SOCKET_ERROR;
}
}
if (WSAWaitForMultipleEvents(1,eventArray,FALSE,WSA_INFINITE,FALSE) == WSA_WAIT_FAILED)
{
sprintf(szError,"WSAWaitForMultipleEvents failed1 %d\n", WSAGetLastError());
MessageBox(NULL,szError,"Client",MB_OK);
}
WSAResetEvent(eventArray[0]);
if (WSAGetOverlappedResult(Socket,&olRecv,&dwNumBytes,FALSE,&dwFlags) == TRUE)
{
if (dwNumBytes == 0)
break;
}
else
{
sprintf(szError,"WSAGetOverlappedResult 111111111failed with error %d\n", WSAGetLastError());
MessageBox(NULL,szError,"Client",MB_OK);
return SOCKET_ERROR;
}
buffRecv.len -= dwNumBytes;
iNumBytes = iNumBytes + dwNumBytes;
if (buffRecv.len == 0)
break;
else
buffRecv.buf += dwNumBytes;
}
fReceiving = FALSE;
return iNumBytes;
A message sent on a datagram socket was larger than the internal message buffer or some other network limit, or the buffer used to receive a datagram