两个socket在通讯的时侯,如果中断了, 
: 比方说拔网线等,这时候写socket不出错, 
: 但是socket状态可能已经变成TIME_WAIT或CLOSE_WAIT, 
: 用netstat可以看到,我想在程序中判断这个socket状态, 
: 便于及时知道socket已经发生异常,有什么办法 

解决方案 »

  1.   

    Socket s = new Socket(..);
    if (s.Poll(-1, SelectMode.SelectRead))
    {
       int nRead = s.Receive();
       if (nRead == 0)
       {
         //socket连接已断开
       }
    }
      

  2.   

    Socket类的Connected 已经试过,不好用!
    声明一下。我用的是 c# 2005
    其他方法正在实验中!
      

  3.   

    其实这个是由于TCP协议的问题,TCP也有解决的方法,那就是将Socket的KeepALive设为True,那么在TCP默认的两小时内,如果Socket仍然未连接的话就会断开。
    当然也可以自己来控制不停的发送小的数据包来确定Socket是否连接正常,
      

  4.   

    通信双方以客户-服务器方式建立TCP连接,用于双方信息的相互提交。当信道上没有数据传输时,通信双方应每隔时间C发送链路检测包以维持此连接,当链路检测包发出超过时间T后未收到响应,应立即再发送链路检测包,再连续发送N-1次后仍未得到响应则断开此连接。
      

  5.   

    msdn介绍了一种非阻塞发送0字节的方法,但是不好用。receive返回0字节倒是可以,好像还得自己主动close一下。