c# – 如何判断基于套接字的客户端连接是否已断开?

如果我的客户端连接在另一端断开(kill -9服务器).客户端需要几分钟才能确定出现问题.即使连接实际上已断开,Socket.Connected也会返回true.

一旦另一端断开链接,确定连接不存在的最快方法是什么?

客户代码:

try{
      Socket socket= new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);
     /*Assume there is a connection on the other end*/
      while (socket.Connected)
      {

          /*Do some processing*/
      }
 }catch (SocketException se){
       Console.WriteLine(ex.Message);
 } catch (Exception ex){
       Console.WriteLine(ex.Message);
 }
 finally
 {
   Console.WriteLine("something bad happen");
 }
最佳答案
这似乎对我有用……有没有人看到任何问题?

public bool IsConnected
{
         get {return !(Socket.Poll(1, SelectMode.SelectRead) 
                                  && m_socket.Available ==0)}
}

也可以加入扩展方法.

public static class SocketExtensions
{
  public static bool IsConnected(this Socket @this)
  {
    return !(@this.Poll(1, SelectMode.SelectRead) && @this.Available == 0);
  }
}

现在,您可以在处理套接字的代码中轻松使用它.

var mySocket = new Socket();
while(mySocket.IsConncted())
{
  // Do Stuff
}

转载注明原文:c# – 如何判断基于套接字的客户端连接是否已断开? - 代码日志