检测关闭的套接字连接C#

时间:2017-01-12 01:52:24

标签: c# .net sockets

如何正确检测客户端已关闭连接?我尝试过发送测试。

byte[] tmp = new byte[1];
bool blockingState = true;

if (_socket != null)
{
     blockingState = _socket.Blocking;
     _socket.Blocking = false;
     _socket.Send(tmp, 0, 0);
}

1 个答案:

答案 0 :(得分:0)

您需要每次轮询连接以查看连接是否仍处于活动状态。这是我使用的代码:

bool SocketConnected(Socket s)
    {
        bool part1 = s.Poll(1000, SelectMode.SelectRead);
        bool part2 = (s.Available == 0);
        if (part1 && part2)
            return false;
        else
            return true;
    }

它的工作原理如下:

如果

,则Poll返回true
  • 连接已关闭,重置,终止或挂起(表示无活动 连接)
  • 连接已激活且有可供阅读的数据

s.Available返回可用于读取的字节数

如果两者都是真的: 没有可供读取的数据,因此连接无效