[erlang-questions] Difference in 'close' for gen_tcp recv vs. active

Dror Mein drormein@REDACTED
Wed Apr 16 18:12:09 CEST 2014


Thank you! it works. I use linux.
btw for future reference:
in setopts/getopts in the options:
{raw,6,4,7200} is keep alive time
{raw,6,5,75} is keep alive interval

{raw,6,6,9} is keep alive probes
On Sunday, April 13, 2014 11:20 PM, Jacob <jacob01@REDACTED> wrote:
 
Hi


On 13.04.2014 17:35, Dror Mein wrote:
> I had the same problem, but I thought using {keepalive,true} or
> {send_timeout,Time} would help. I see in wireshark that keep alive does
> not pass through but I still don't get an {error, closed}.
> Someone wrote that default timeout for keepalive is two hours. where can
> it be configured?

TCP keepalive configuration is OS dependant. What OS are you using?

NOTE: The following applies to _Linux_ :

With Linux you can either set it
  a) globally via sysctl net.ipv4.tcp_keepalive_*
  b) globally per /proc/sys/net/ipv4/tcp_keepalive_*
  c) per socket with setsockopt() and TCP_KEEPCNT, TCP_KEEPIDLE,
TCP_KEEPINTVL
  d) per started (ELF) executable with the libkeepalive wrapper (see below).

see tcp(7) for details.

A helpful HOWTO can be found here:
http://www.tldp.org/HOWTO/html_single/TCP-Keepalive-HOWTO/

ad d):
See the HOWTO above for details. I installed the libkeepalive0 package
(Ubuntu 13.10), tried it with Erlang (erts-6.0) and according to strace
it seems to work. I would avoid LD_PRELOAD hacks in production though.

The command line was
  LD_PRELOAD=libkeepalive.so KEEPCNT=20 KEEPIDLE=180 KEEPINTVL=60 erl

If you want to use strace to check what happens enter:
  LD_PRELOAD=libkeepalive.so KEEPCNT=20 KEEPIDLE=180 KEEPINTVL=60 strace
-f -o keep.str -e trace=setsockopt erl

and look into keep.str after using gen_tcp:connect/3.

HTH,

Jacob
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://erlang.org/pipermail/erlang-questions/attachments/20140416/267070e8/attachment.htm>


More information about the erlang-questions mailing list