How to check if a socket is connected/disconnected in C#?

前端 未结 11 1245
礼貌的吻别
礼貌的吻别 2020-11-28 18:50

How can you check if a network socket (System.Net.Sockets.Socket) is still connected if the other host doesn\'t send you a packet when it disconnects (e.g. because it discon

11条回答
  •  孤街浪徒
    2020-11-28 19:02

    As Paul Turner answered Socket.Connected cannot be used in this situation. You need to poll connection every time to see if connection is still active. This is code I used:

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

    It works like this:

    • s.Poll returns true if
      • connection is closed, reset, terminated or pending (meaning no active connection)
      • connection is active and there is data available for reading
    • s.Available returns number of bytes available for reading
    • if both are true:
      • there is no data available to read so connection is not active

提交回复
热议问题