Modified libkeepalive

Up ../

Modified libkeepalive - connect(2) and accept(2)

Routers and firewalls dropping tcp connection after a short period (eg five minutes) is a problem for applications that don't have configurable keepalive options.

Fabio Busatto's intercept library libkeepalive works by intercepting function calls to socket(2) and setting the keepalive parameters using setsockopt(2).

The actual values of (SO_KEEPALIVE, TCP_KEEPCNT, TCP_KEEPIDLE, TCP_KEEPINTVL) are passed to the process in environment variables.

Modifications

Since these parameters only apply to tcp, my take on this approach was to intercept only the connect(2) and accept(2) system calls and to retrieve the parameter values from a configuration file instead of from the processes' environment. eg

   # SSH to 192.94.73.15
   env LD_PRELOAD=/intercept/libkeepalive.so /usr/bin/ssh user@192.94.73.15

# Example configuration file (location is defined at compile time.)

# Connect entries
#C   destips/mask   dest-portrange   keepalive   idle   intvl   count   
# Accept entries
#A   srcpip/mask    local-portrange  keepalive   idle   intvl   count   
C     192.168.0.0/16     *           N           -      -       -
C     192.94.73.15      22           Y           240     75     8

In this example the ssh matches the second entry and the parameters are taken from the file.

Source at https://github.com/pellucida/keepalive/ Source in files/

BUGS
Not thread aware in any way (ie not reentrant or async safe.) So only suitable for single threaded processes. Connect(2) or accept(2) shouldn't be called directly or indirectly from signal handlers.

SEE ALSO
An Mac OSX [10.4.11] version of Fabio's code http://toves.freeshell.org/interpose/old/keepalive_osx.c

Updated version that intercepts connect(2) http://toves.freeshell.org/interpose/files/

LICENSE
Creative Commons CC0 http://creativecommons.org/publicdomain/zero/1.0/legalcode

AUTHOR
James Sainsbury