本次错误在WinSock recvfrom/WSARecvFrom都会出现
这次使用recvfrom函数,在某些情况下总会返回10054的错误,但是程序通信是正常的,所以这个问题可能会导致在某些时候使程序跳出了接收数据的循环部分,而使得不能正常接收到数据。
这是winsock的一个bug,原因请看:http://support.microsoft.com/kb/263823
解决办法,使用WSAGetLastError()来捕捉错误后,进行错误判断,若是错误为WSAECONNRESET 的话,就不做任何处理
res = recvfrom( s, lpszData, dwSize, 0, sockAddr, &nLen);
if (res == SOCKET_ERROR)
{
int derr;
derr = WSAGetLastError();
if(derr != WSAECONNRESET )
{
CString str;
str.Format("recvfrom: error = %d\n",derr );
AfxMessageBox(str);
}
else
return 0;
}
如上所示