拔掉网线时Socket(TCP)的链路检测方法

    最近在做TCP相关的定位数据上传,发现client在与server进行Socket(TCP)通信的时候,若TCP client的应用程序正常或者异常退出时,Server都可以在对应的socket通信链路上获得响应(如返回某个值0,或者抛出异常等);但如果client的网线被拔掉的情况下,那正常情况下,服务器需要经过很长的一段时间才会知道客户端的网线掉了(或者网线被拔掉之后允许的时间段内重新插上,那么TCP Server都不会收到TCP链路断开的响应),这对很多TCP Server应用来说这么长的时间是不允许的,或者都不可能发现Client已经掉线,那么这种情况可以使用“心跳机制”来解决此类问题。
    由于TCP采集程序只是通过长连接来接收消息,而不能与客户端建立心跳机制,所以唯一可行的办法就是设置超时机制,在非阻塞模式工作的情况下,可以通过空闲计数来判断是否连接超时,在连接空闲情况下TCP采集程序会休眠10ms,并且空闲计数器加1,当收到数据时空闲计数器清零,因此当空闲计数达到3000次的时候,说明socket连接在30秒内没有收到数据,此时认为连接超时,主动的断开连接,释放socket资源。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值