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断开。我实验了下确实有效。但是这个方式比较奇葩,不知道微软的人怎么设计成这样的接口。

©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • =========================================================...
    lavor阅读 3,508评论 0 5
  • Spring Cloud为开发人员提供了快速构建分布式系统中一些常见模式的工具(例如配置管理,服务发现,断路器,智...
    卡卡罗2017阅读 134,967评论 19 139
  • 今天算是和他正式分手了,并非是因为之间有什么纠缠,而是说他也放下了的那种分开。这几天来,他一直在试图挽回,而我也感...
    板必胜阅读 242评论 0 0
  • 文:剧不终 ▼ 毕业20年。 原以为共同度过的4年1461天35064小时,留下来的记忆是丰厚的。无奈用了20年的...
    剧不终阅读 350评论 0 2
  • 窗外烟雨霏霏,我坐在书桌前认真地翻看了下自己在简书的更文历史,猛然发现我已坚持日更一月。腹中的小调皮狠狠踢了我一脚...
    安远阅读 278评论 10 8