请有人帮助我如何从CAsyncSocket类中捕获套接字操作的错误。
如果我这样做:
int iLen = recv(socket, socketBuffer, sizeBuffer, 0);
if(iLen==SOCKET_ERROR) {
//handle error here
} else {
//do something with the received data
}
它始终返回错误,即WSAEWOULDBLOCK
,并且对于send(),connect()等其他操作也是如此...
根据MSDN,这不是一个致命的错误,并且必须花费一些时间才能完成这些操作。
那么,每当我的程序正确执行recv()或send()时,我怎样才能实际检查?
答案 0 :(得分:1)
首先,您不应该混用 CAsyncSocket API 和 Berkley套接字API 。
您的OnReceive
处理程序应如下所示:
CByteArray InBuffer;
InBuffer.SetSize(DEFAULT_RX_BUFFER_SIZE);
int nBytes = Receive(InBuffer.GetData(), (int)InBuffer.GetSize());
switch (nBytes)
{
case 0:
ShutDown(CAsyncSocket::both);
break;
case SOCKET_ERROR:
if (::GetLastError() != WSAEWOULDBLOCK)
ShutDown(CAsyncSocket::both);
else
AsyncSelect();
break;
default:
{
// TODO: data processing goes here
}
break;
}