0

请有人帮助我如何从 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() 时呢?

4

1 回答 1

1

首先你不应该混合CAsyncSocket APIBerkley Socket 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;  
    }
于 2016-05-11T08:55:48.330 回答