linux下的tcp超时机制

1 篇文章 0 订阅

今天在linux下用telnet连接另一台交换机,结果发现,拔掉网线,telnet就僵死在那里.在windows下,会在10秒后退出telnet````````````经过若干的百度,google后证实,原来linux 内核对于tcp的链路检测这块,果然存在一个很大的不和谐的地方,就是它默认的情况下,是不会频发性的去探测链路的链接状况,而是要等个默认的keepalive_time,再去发送探测包,如果没有响应则在keepalive_intval之后再次发送探测包,直到keepalive_count个之后,就关闭该socket!

所以对busybox的networking目录下的telnet.c进行了代码的添加

int keepalive = 1; // 开启keepalive属性  

int keepidle = 5; // 如该连接在60秒内没有任何数据往来,则进行探测  

int keepinterval = 5; // 探测时发包的时间间隔为5 秒  

int keepcount = 2; // 探测尝试的次数。如果第1次探测包就收到响应了,则后2次的不再发。  

setsockopt(rs, SOL_SOCKET, SO_KEEPALIVE, (void *)&keepalive , sizeof(keepalive ));  

setsockopt(rs, SOL_TCP, TCP_KEEPIDLE, (void*)&keepidle , sizeof(keepidle ));  

setsockopt(rs, SOL_TCP, TCP_KEEPINTVL, (void *)&keepinterval , sizeof(keepinterval ));  

setsockopt(rs, SOL_TCP, TCP_KEEPCNT, (void *)&keepcount , sizeof(keepcount ));  

重新编译,执行,一切oK!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值