Does anyone know if Linux supports keep-alive socket options on an outgoing connection?
I made an outgoing connection with keep-alive options but netstat –timers shows off (I'm assuming timers are off):
tcp 0 0 localhost.localdomain:44307 172.16.0.15:2717 ESTABLISHED off (0.00/0/0)
Incoming connections with the same socket options applied show:
tcp 0 0 172.16.0.3:8585 localhost.localdomain:21527 ESTABLISHED keepalive (29.26/0/0)
I wish I could see socket options but neither ss or lsof will show me them.
Best Answer
First you need to make sure that TCP keepalive is enabled on your system. You can check the default settings like this:
Then make sure you're setting it properly in your code. It should look something like this:
On my system when I use the above code to set SO_KEEPALIVE on both sides I see:
And then I verified with wireshark that the keepalive
NOP
was being sent.More details can be found in the TCP Keepalive HOWTO.