linux集群keepalive,在Linux环境下使用TCP的keepalive机制

Linux内置支持keepalive机制,为了使用它,你需要使能TCP/IP网络,为了能够配置内核在运行时的参数,你还需要procfs和sysctl的支持。

这个过程涉及到keepalive使用的三个用户驱使的变量:

tcp_keepalive_time:表示的是最近一次数据包(简单的不含数据的ACKs包)发送与第一次keepalive探针发送之间的时间间隔;当连接被标记为keepalive之后,这个计数器就不会再使用。

tcp_keepalive_intvl:表示的是并发keepalive探针之间的时间间隔。

tcp_keepalive_probes:在确定连接已经断开并且通知应用层之前所发送的没有得到回复的探针数。

对于这三个参数可以在Linux系统的终端中查看和修改它们的缺省值:

查看三个参数的值:

[root@Server3 ~]# cat /proc/sys/net/ipv4/tcp_keepalive_time

7200

[root@Server3 ~]# cat /proc/sys/net/ipv4/tcp_keepalive_intvl

75

[root@Server3 ~]# cat /proc/sys/net/ipv4/tcp_keepalive_probes

9

通过命令对这三个参数值进行修改(图中将三个参数值分别设为:600、60、20):

[root@Server3 ~]# echo 600 > /proc/sys/net/ipv4/tcp_keepalive_time

[root@Server3 ~]# echo 60 > /proc/sys/net/ipv4/tcp_keepalive_intvl

[root@Server3 ~]# echo 6 > /proc/sys/net/ipv4/tcp_keepalive_probes

这种方式重置三个参数值,在系统重启后三个参数的值又会恢复到默认值,具体如何让系统永远记住自己设置的值,可参考其他资料,我们现在关系的是如何在程序中使用keepalive机制并设置这三个参数的值。

在程序中使用keepalive机制

想在程序中使用这种机制,只需要使用setsockopt()函数。

setsockopt()函数用于任意类型、任意状态套接口的设置选项值。尽管在不同协议层上存在选项,但本函数仅定义了最高的“套接口”层次上的选项。选项影响套接口的操作,诸如加急数据是否在普通数据流中接收,广播数据是否可以从套接口发送等等。

下面为setsockopt()函数的原型:

#include

#include

int setsockopt(int sock, int level, int optname, const void *optval, socklen_t optlen);

参数:

sock:将要被设置或者获取选项的套接字。

level:选项所在的协议层。

optname:需要访问的选项名。

optval:对于getsockopt(),指向返回选项值的缓冲。对于setsockopt(),指向包含新选项值的缓冲。

optlen:对于getsockopt(),作为入口参数时,选项值的最大长度。作为出口参数时,选项值的实际长度。对于setsockopt(),现选项的长度。

为了使用函数setsockopt()将某个特定的套接字的keepalive机制打开,参数s是一个socket文件描述符,必须要在这之前使用socket()函数进行创建;参数level必须设置为SOL_SOCKET;第三个参数必须设置为SO_KEEPALIVE;optval参数必须是一个布尔型整型变量,表示想要使能这个选项;最后一个参数表示第四个参数的大小。

21/212>

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值