使用CAsynSocket,如何捕获套接字操作的退出代码?

时间:2016-05-11 06:34:20

标签: c++ mfc network-programming casyncsocket

请有人帮助我如何从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()时,我怎样才能实际检查?

1 个答案:

答案 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;  
    }