C# socket网络连接判定方法 (2016-09-18 14:14:45)

Socket是带状态的网络协议,但是比较麻烦的是并不能直接用Socket.Connected来判断是否仍在连接中。比如一方异常死机或者网络链路中断,这个标志位不能立刻发生改变。

比较实用的是以下判断方式

bool IsConnected(Socket s, int wait_time)

{

    try

    {

        bool part1 = s.Poll(wait_time, SelectMode.SelectRead);

        bool part2 = (s.Available == 0);

        if (part1 && part2)

        {

          return false;

        }

        else

          return true;

    }

    catch(Exception e)

    {

      return false;

    }

 }

用Poll函数判断当前是否有数据可以读取,如果可以读取并且Available有效数据长度为0,则表示socket断开。我实验了下确实有效。但是这个方式比较奇葩,不知道微软的人怎么设计成这样的接口。

你可能感兴趣的:(C# socket网络连接判定方法 (2016-09-18 14:14:45))