Server关闭了Socket
Client的recv会收到0,至于Server端再对这个已关闭的Socket读肯定失败了

解决方案 »

  1.   

    有绅士风度一些吧
    先shutdown socket
    然后等到对方同意关闭再closesocket
      

  2.   

    谢谢两位的解答。
    partime(partime):
    现在我做服务端这一边,另外有个人做客户端,他说如果他那边没有closesocket()
    要我考虑这种情况,在服务端这边closesocket(),我不知道怎么做,你能教我吗?
      

  3.   

    说真的,先以只读方式shutdown(hsocket),
    然后用select等待客户端closesocket。
    设定一个时间片,如果客户端在该时段内closesocket
    服务器就立即closesocket,否则超时客户端未closesocket
    服务器立即closesocket
      

  4.   

    partime(partime):
    怎么设时间片啊?
      

  5.   

    自己定时了
    用select()等待端口网络事件
    当发生时间时,如网络数据到达\网络故障\对方断开
    等发生,select会立即返回,否则等到超时才返回
    如果不想采用阻塞方式可以用异步方法
    WSASelectselect(Read_Socket_Arrays,Write_Socket_Arrays,Error_Socket_Arrays,Time_Val)