먼저 시스템에서 TCP keepalive가 활성화되어 있는지 확인해야합니다. 다음과 같이 기본 설정을 확인할 수 있습니다.
# sysctl net.ipv4.tcp_keepalive_time net.ipv4.tcp_keepalive_probes net.ipv4.tcp_keepalive_intvl
net.ipv4.tcp_keepalive_time = 7200
net.ipv4.tcp_keepalive_probes = 9
net.ipv4.tcp_keepalive_intvl = 75
그런 다음 코드에서 올바르게 설정했는지 확인하십시오. 다음과 같이 보일 것입니다 :
int optval = 1;
if (setsockopt(s, SOL_SOCKET, SO_KEEPALIVE, &optval, sizeof(optval)) < 0) {
perror("setsockopt()");
close(s);
exit(EXIT_FAILURE);
}
위의 코드를 사용하여 양쪽에 SO_KEEPALIVE를 설정하면 시스템에서 다음을 볼 수 있습니다.
tcp 0 0 127.0.0.1:48591 127.0.0.1:5555 ESTABLISHED keepalive (6958.37/0/0)
tcp 0 0 127.0.0.1:5555 127.0.0.1:48591 ESTABLISHED keepalive (6958.37/0/0)
그런 다음 keepalive NOP
가 전송되고 있는지 wireshark로 확인했습니다 .
자세한 내용은 TCP Keepalive HOWTO 에서 찾을 수 있습니다 .