接收组播数据的代码如下:发生的错误时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;