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.


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
   env LD_PRELOAD=/intercept/ /usr/bin/ssh user@

# 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     *           N           -      -       -
C      22           Y           240     75     8

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

Source at Source in files/

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.

An Mac OSX [10.4.11] version of Fabio's code

Updated version that intercepts connect(2)

Creative Commons CC0

James Sainsbury