Linux下keepalive为什么不起作用
测试时发现,网线拔掉后,如果该socket一直在尝试接收,且不发送数据,则10秒左右能够收到断开信号。
但是如果socket一直在发送数据,则keepalive不起作用,直到发送缓冲区满了才能断开
但是如果socket一直在发送数据,则keepalive不起作用,直到发送缓冲区满了才能断开
int keepalive = 1; // 开启keepalive属性
int keepidle = 5; // 如该连接在5秒内没有任何数据往来,则进行探测
int keepinterval = 1; // 探测时发包的时间间隔为1 秒
int keepcount = 5; // 探测尝试的次数.如果第1次探测包就收到响应了,则后4次的不再发
socklen_t optlen = sizeof(socklen_t);
if (setsockopt(m_Socket, SOL_SOCKET, SO_KEEPALIVE, (void *)&keepalive, optlen) < 0 ||
setsockopt(m_Socket, SOL_TCP, TCP_KEEPIDLE, (void *)&keepidle, optlen) < 0 ||
setsockopt(m_Socket, SOL_TCP, TCP_KEEPINTVL, (void *)&keepinterval, optlen) < 0 ||
setsockopt(m_Socket, SOL_TCP, TCP_KEEPCNT, (void *)&keepcount, optlen) < 0)
{
ClosePort();
return false;
}
...全文
相关推荐
在Linux环境下使用TCP的keepalive机制
本文主要介绍了在Linux环境下如何启用和配置TCP的keepalive机制,包括涉及的三个关键参数:tcp_keepalive_time、tcp_keepalive_intvl和tcp_keepa
linux tcp keepalive存活代码设置
客户端连接到指定服务器并启用keepalive功能,接收并打印服务器数据;服务器监听指定端口,接受连接并向客户端发送用户输入的内容
Gre Keepalive & linux c code
Gre keepalive Cisco document; And linux c code; Only for reference.
GRE隧道keepalive的说明
#### GRE隧道Keepalive的工作原理在GRE隧道中,Keepalive机制的实现与传统的物理接口Keepalive类似。
keepalive+twemproxy+ redis主从安装配置的例子(linux)
在Linux系统中,可以通过修改`/etc/sysctl.conf`文件来设置TCP Keepalive的时间参数,例如:```bashnet.ipv4.tcp_keepalive_time = 120


