Las opciones Keep-alive no funcionan en Linux para una conexión saliente

¿Alguien sabe si Linux soporta las opciones de socket keep-alive en una conexión saliente?

Hice una conexión saliente con las opciones keep-alive, pero netstat –timers muestra (estoy suponiendo temporizadores están apagados):

tcp 0 0 localhost.localdomain:44307 172.16.0.15:2717 ESTABLISHED off (0.00/0/0) 

Las conexiones entrantes con las mismas opciones de socket aplicadas muestran:

 tcp 0 0 172.16.0.3:8585 localhost.localdomain:21527 ESTABLISHED keepalive (29.26/0/0) 

Ojalá pudiera ver las opciones de socket, pero ni ss ni lsof me mostrarán ellos.

Primero debe asegurarse de que TCP keepalive está habilitado en su sistema. Puede comprobar la configuración predeterminada de este modo:

 # 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 

A continuación, asegúrese de que está configurando correctamente en su código. Debe ser algo como esto:

 int optval = 1; if (setsockopt(s, SOL_SOCKET, SO_KEEPALIVE, &optval, sizeof(optval)) < 0) { perror("setsockopt()"); close(s); exit(EXIT_FAILURE); } 

En mi sistema cuando uso el código anterior para establecer SO_KEEPALIVE en ambos lados veo:

 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) 

Y luego verifiqué con wireshark que se estaba enviando el NOP keepalive.

Más detalles se pueden encontrar en el TCP Keepalive HOWTO .

Configuración de cliente-sysctl:

 sudo /sbin/sysctl -a|grep keep net.ipv4.tcp_keepalive_time = 20 net.ipv4.tcp_keepalive_probes = 1 net.ipv4.tcp_keepalive_intvl = 1 

Cliente keep tcpdump:

 sudo /usr/sbin/tcpdump -nn -vv -i bond0 tcp and host 10.201.126.72 and port 8001 tcpdump: listening on bond0, link-type EN10MB (Ethernet), capture size 65535 bytes 

Pero no cualquier captura de paquete, lo que significa tcp_keepalive_time no funciona