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

标签 c# .net networking sockets

如果我的客户端在另一端端(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# - 如何判断基于套接字的客户端中的连接是否已断开?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/681866/

相关文章:

来自命令行的 C# 程序参数?

c# - 如何调试 PerfMon.dll 中的 0xc0000409 错误?/组装绑定(bind)

amazon-web-services - 在 terraform IPSec 隧道中使用的 AWS IP 地址(通过 Transit Gateway)

c - 在简单的客户端/服务器聊天程序中显示文本的困难(显示当前输入)-C

c# - 将数组反序列化为复杂对象

c# - Sitecore - 在 C# 中设置控件顺序

c# - 将新元组转换为旧元组会产生编译错误

c# - WCF 服务调用 - 仅部分参数超时?

c# - 使用 docker 在 Linux 上运行 .net Framework 应用程序的最佳方式是什么

c++ - 在网络库中初始化Winsock的最佳实践