APIs:
通过设置SO_KEEPALIVE可以开启socket的发送keepalive包检测功能。
setsockopt(sfd,SOL_SOCKET,SO_KEEPALIVE,(void*)&flags,sizeof(flags))
开启以后,由三个变量决定如何检测:
tcp_keepalive_time :链接空闲多久以后开始发送keepalive包检测。
默认时间是7200s。
cat /proc/sys/net/ipv4/tcp_keepalive_time
7200
tcp_keepalive_intvl : 从开始发keepalive,,如果无响应,下一次间隔多久再次发送keepalive
默认是75s
cat /proc/sys/net/ipv4/tcp_keepalive_intvl
75
tcp_keepalive_probes: 重复发送多少次以后,如果始终无响应,认为链接断掉。
默认是9次。
cat /proc/sys/net/ipv4/tcp_keepalive_probes
9
上述三个变量可以在socket中进行设置:
setsockopt(my_socket, SOL_TCP, TCP_KEEPIDLE, &my_idle_seconds, sizeof(my_idle_seconds))
setsockopt(my_socket, SOL_TCP, TCP_KEEPINTVL, &my_intvl, sizeof(my_intvl))
setsockopt(my_socket, SOL_TCP, TCP_KEEPCNT, &my_cnt, sizeof(my_cnt))