keep-alive- TCP keep alive implementation

Safe HaskellSafe



This module allows you to set per-connection keep alive parameters on windows and linux enviroments. For more information on keep alive signals see See also for a linux specific implementation.

The module is meant to be used in conjuction with the "network" package. However, in order to ensure adaptability, all functions require a socket file descriptor instead of an implementation dependent socket type. For the network package, such a descriptor can be obtained with the withFdSocket function:

-- sock is a Socket type
withFdSocket sock $ \fd -> do
   before <- getKeepAliveOnOff fd
   print before -- False
   -- set keep alive on, idle 60 seconds, interval 2 seconds
   rlt <- setKeepAlive fd $ KeepAlive True 60 2
   case rlt of
       Left err -> print err
       Right () -> return ()
   after <- getKeepAliveOnOff fd
   print after -- True

Please note that only the envocing process can manipulate sockets based on their file descriptors.



data KeepAlive Source #

The main data structure defining keep alive parameters




  • kaOnOff :: Bool

    Turns on / off keep alive probes

  • kaIdle :: Word32

    The interval in seconds between the last data packet sent and the first keep alive probe

  • kaIntvl :: Word32

    The interval in seconds between subsequential keepalive probes

setKeepAlive Source #


:: CInt

Socket file descriptor

-> KeepAlive

Keep alive parameters

-> IO (Either KeepAliveError ()) 

Set keep alive parameters for the current socket

getKeepAliveOnOff Source #


:: CInt

Socket file descriptor

-> IO Bool 

Returns True if keep alive is active for the specified socket