首先建立的是一个服务器,监听队列的长度设的是100,在大量的客户端不断连接的情况下,
接收数据代码如下:ret= recv(m_hSocket,Pack,4,0); 
if (ret != 4)
{
  strTemp.Format("错误号为%d,ret=%d",GetLastError(),ret);
}但我出现的情况是:错误号为0,ret = 0;想了很久还是没找到原因请问高手们:为什么会这样呢?!
在线等,谢谢~~~

解决方案 »

  1.   

    recv 返回 0,表明对方主动关闭
      

  2.   

    recv
    Return Values:
    If no error occurs, recv returns the number of bytes received. If the connection has been gracefully closed, the return value is zero. Otherwise, a value of SOCKET_ERROR is returned, and a specific error code can be retrieved by calling WSAGetLastError.recv 返回 0,表明对方主动关闭,是完美关闭
    WSAGetLastError的10054(WSAECONNRESET)是强制关闭
    “完美关闭”和“强制关闭”是不同的
      

  3.   

    呵呵,0就是发生了4次握手的关闭10054(WSAECONNRESET)指的是非正常关闭,tcp的keepalive机制返回
      

  4.   

    "10054(WSAECONNRESET)指的是非正常关闭,tcp的keepalive机制返回"
    是什么意思。
    我在做P2P,在两个PEER之间通信一段时间后也出现10054错误。