Socket与拔掉网线

原创 2007年09月26日 10:50:00

Socket与拔掉网线

当客户端与服务端通过Tcp Socket进行通信时,如果客户端应用正常退出或异常退出,服务端都会在对应的连接上获取感知(如返回0、或抛出异常)。但是,如果客户端的网线被拔掉,那么,默认情况下,服务端需要在2个小时后才会感知客户端掉线。对于很多服务端应用程序来说,这么长的反应时间是不能忍受的。
    我们通常在应用层使用“心跳机制”来解决类似的问题,这是可行的。
    然而,在这里,我们可以使用Socket自己的心跳机制来解决这一问题。 System.Net.Sockets.Socket提供了IOControl()方法给我们来设置Sokect的心跳机制的相关参数。比如,我们设置KeepAlive的时间为20秒,检查间隔为2秒。可以这样做:

            int keepAlive = -1744830460; // SIO_KEEPALIVE_VALS
            byte[] inValue = new byte[] { 1, 0, 0, 0, 0x20, 0x4e, 0, 0, 0xd0, 0x07, 0, 0 }; //True, 20 秒, 2 秒
             sock.IOControl(keepAlive, inValue, null);

    20秒(20000毫秒)的16进制表示是4e20,2秒(2000毫秒)的16进制表示是07d0,如此,你可以修改inValue参数为自己希望的值。
    在上述设置下,如果拨掉客户端网线,服务器Socket.Receive()会在20秒后抛出异常(注意,在这20秒服务端内无论是从该socket上接收消息还是发送消息都不会抛出异常!)。

 

拔掉网线时Socket的检查方法

拔掉网线时Socket的检查方法 http://blog.csdn.net/fan_hai_ping/article/details/6699650 最近在做有关于TCP采集程序时,发现在...
  • qq_26399665
  • qq_26399665
  • 2016年09月17日 19:54
  • 1082

socket 与拔掉网线

当客户端与服务端通过Tcp Socket进行通信时,如果客户端应用正常退出或异常退出,服务端都会在对应的连接上获取感知(如返回0、或抛出异常)。但是,如果客户端的网线被拔掉,那么,默认情况下,服务端需...
  • a376143220
  • a376143220
  • 2017年09月20日 11:20
  • 101

tcp socket 网线断开判断

有些网络应用在网线断开后重新连上的情况下  tcp socket 连接保持 ESTABLISH 状态不变,[喝小酒的网摘]http://blog.const.net.cn/a/17107.htm ...
  • pb8
  • pb8
  • 2013年11月27日 17:51
  • 4941

拔掉网线后,主机和本主机上的虚拟机通信

默认网卡《VMware Network Adapter VMnet1》IP:192.168.80.1默认网卡《VMware Network Adapter VMnet8》IP:192.168.57.1...
  • tenor
  • tenor
  • 2011年03月19日 17:38
  • 1259

linux TCP编程处理网线拔掉

客户端处理: 在linux下写socket的程序时,如果尝试send到一个disconnected socket上,底层就会抛出一个SIGPIPE信号。这个信号缺省的处理方法是退出进程。大多数时候,...
  • a421701136
  • a421701136
  • 2014年12月30日 11:59
  • 1396

TCP socket网线断开判断

TCP socket网线断开判断 此文章为转载,转载路径:http://blog.hehehehehe.cn/a/17107.htm 此方法可行,经过自己的验证!    有些网络应用在网线...
  • whb_fei
  • whb_fei
  • 2017年02月07日 18:08
  • 3014

网线断掉检测

1. linux 对socket执行write 时的内部机制? 可能涉及一些基础性的I/O机制,我也搞不清楚怎么回事,分别运行server和client, 然后终止server, 让clie...
  • sessos
  • sessos
  • 2017年11月06日 19:36
  • 85

mina框架CumulativeProtocolDecoder.doDecode方法浅析

测试说明 注释代码37行,打开38行。服务器正常启动,确认设备连接正常。 设备为客户端,每3秒向服务器发送心跳模拟网络短暂不通,多个包同时到达,粘包情况: 拔掉网线30秒,插入网线。代码如下pa...
  • qq1247
  • qq1247
  • 2017年09月28日 16:39
  • 77

ubuntu 拔掉网线后插上连不上网

文章出处:http://blog.csdn.net/shift_wwx 使用ifconfig eth0 down; ifconfig eth0 up 使用disable networking 后...
  • jingerppp
  • jingerppp
  • 2014年12月17日 17:04
  • 1300

linux c检测网线热插拔(netlink)

#include #include #include #include #include #include #include #include #inclu...
  • qq123386926
  • qq123386926
  • 2016年02月19日 09:37
  • 1255
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:Socket与拔掉网线
举报原因:
原因补充:

(最多只允许输入30个字)