看recv函数的返回值官方文档。提到了“优雅地关闭连接,就返回0“,但是我在客户端调closesocket,server端还是得到-1啊[code=txt] If the connection has been gracefully closed, the return value is zero.[/code]

解决方案 »

  1.   

    To assure that all data is sent and received on a connected socket before it is closed, an application should use shutdown to close connection before calling closesocket.
      

  2.   

    -1 就是 SOCKET_ERROR ,  WSAGetLastError 分类处理错误信息
      

  3.   

    shutdown(fd, SD_BOTH)
      

  4.   

    网络编程有时候服务器或者客户端并不能很好的检测到对方断开,一般的做法是设置超时机制,超过一段时间没有接收到对方的心跳同步包则认为对方已经断开了,此时服务器应该主动断开连接,尤其是在GPRS网络尤为明显。