keepalive timer?

Matthias Lang matthias@REDACTED
Mon Jun 21 17:39:52 CEST 2004

Your question isn't really about Erlang, it's about sockets.

Erlang's keepalive corresponds to the POSIX* option
SO_KEEPALIVE. Under linux you can query and modify the time through
the /proc interface. E.g. on my desktop:

  for i in /proc/sys/net/ipv4/tcp_keepalive_*; do echo $i; cat $i; done

The linux source documents this reasonably well, in Documentation/fs/proc.txt

    | Number of  keep  alive  probes  TCP  sends  out,  until  it  
    | decides  that the connection is broken.
    | How often  TCP  sends out keep alive messages, when keep 
    | alive is enabled. The default is 2 hours.

Google will tell you what the third value does.

It appears that you can't configure the keepalive time on a per-socket
basis, at least not under linux 2.4.25. Maybe it's possible under
other operating systems, probably not. I don't know enough about other
OSs' TCP stacks to answer.

The send_timeout option has been discussed on the mailing list
before. It isn't really related to your question. It doesn't do
exactly what it should, which is probably why it's undocumented. See


Peter Lund writes:
 > Reading the documentation for module inet:
 > {keepalive, Boolean}
 >     (TCP/IP sockets) Enables periodic transmission on a connected
 >     socket, when no other data is being exchanged. If the other
 >     end does not respond, the connection is considered broken and
 >     an error message will be sent to the controlling process.
 >     Default disabled.
 > My question is: How long is this period by default between checks
 > that the TCP connection still is alive?
 > Is there a way to modify the default? (I saw some traces after some
 > other undocumented option 'send_timeout', but I do not know if that
 > was relevant to this problem or not.)
 > -- 
 > Peter Lund
 > mobile: +46 70 543 9416

More information about the erlang-questions mailing list