What exactly does SO_KEEPALIVE do?
From Andrew Gierth (firstname.lastname@example.org):
The SO_KEEPALIVE option causes a packet (called a 'keepalive probe')
to be sent to the remote system if a long time (by default, more than
2 hours) passes with no other data being sent or received. This packet
is designed to provoke an ACK response from the peer. This enables
detection of a peer which has become unreachable (e.g. powered off or
disconnected from the net). See ``2.8 Why does it take so long to
detect that the peer died?'' for further discussion.
Note that the figure of 2 hours comes from RFC1122, "Requirements for
Internet Hosts". The precise value should be configurable, but I've
often found this to be difficult. The only implementation I know of
that allows the keepalive interval to be set per-connection is SVR4.2.