做了个tcp Server,当有client连接后,如果网线断开,这时候tcp server端判断不出异常,即使发送数据返回值也是true,应该如何判断网线断开的情形呢?

解决方案 »

  1.   

    一般情况下异常断开后,RECV会返回0的啊,不知道你有没有判断过这种情况.
      

  2.   

    通过事件 WSAEventSelect选择 FD_CLOSE事件。
    WSAEnumNetworkEvents获取通知、
      

  3.   


    select()时连错误也检测.fd_set fdread;
    fd_set fdexcept;FD_ZERO(&fdread);
    FD_ZERO(&fdexcept);
    FD_SET(ClientSocket,&fdread);
    FD_SET(ClientSocket,&fdexcept);
    ...
    ...
      

  4.   

    用select检测,如果是0,应该是正常,-1表示错误,1表示超时,好像是这样。
      

  5.   

    一种是采用心跳方式,这个比较可靠。
    一种是设置socket的keep alive(SO_KEEPALIVE)属性。