linux网络编程---心跳检测

本文探讨了在Linux和Windows下进行TCP心跳检测的不同方法。在UNIX网络编程中,不推荐使用SO_KEEPALIVE,而是建议通过业务层心跳包实现。而在Windows下,可以通过设置TCP KeepAlive参数来检测非正常断开的连接。文中提供了具体的代码示例,展示了如何在Linux和Windows下设置TCP KeepAlive的时间间隔和探测次数。
摘要由CSDN通过智能技术生成

对于 SO_KEEPALIVE做心跳,我也知道,但是平时一般不用,第一是使用SO_KEEPALIVE你无法控制,它会每时每刻都发,但是使用心跳我们自己可以收到数据包的情况下不发,第二使用了SO_KEEPALIVE后,对于判断网络断开时间太长,对于需要及时响应的程序不太适应。
大家一般都是使用业务层心跳来处理,主要是灵活可控。

UNIX网络编程不推荐使用SO_KEEPALIVE来做心跳检测,还是在业务层以心跳包做检测比较好,也方便控制,楼上给的代码是UNIX下的,WIN下不适用。


windows下
此处的”非正常断开”指TCP连接不是以优雅的方式断开,如网线故障等物理链路的原因,还有突然主机断电等原因
有两种方法可以检测:1.TCP连接双方定时发握手消息 2.利用TCP协议栈中的KeepAlive探测
第二种方法简单可靠,只需对TCP连接两个Socket设定KeepAlive探测,
所以本文只讲第二种方法在Linux,Window2000下的实现(在其它的平台上没有作进一步的测试)
Windows 2000平台下
头文件
#include <mstcpip.h>
//定义结构及宏
struct TCP_KEEPALIVE {
u_longonoff;
u_longkeepalivetime;
u_longkeepaliveinterval;

} ;

  1. tcp_keepalive live,liveout;  
  2. live.keepaliveinterval=500;  
  3. live.keepalivetime=3000;  
  4. live.onoff=TRUE;  
  5. int iRet = setsockopt(Socket,SOL_SOCKET,SO_KEEPALIVE,(char *)Opt,sizeof(int));  

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值