keep-alive-0.2.1.0: TCP keep alive implementation
Safe HaskellSafe-Inferred
LanguageHaskell2010

Network.Socket.KeepAlive

Description

This module allows you to set per-connection keep alive parameters on windows, linux and darwin environments. For more information on keep alive signals see https://en.wikipedia.org/wiki/Keepalive. See also https://tldp.org/HOWTO/html_single/TCP-Keepalive-HOWTO/ 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.

Synopsis

Documentation

data KeepAlive Source #

The main data structure defining keep alive parameters

Constructors

KeepAlive 

Fields

  • 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 #

Arguments

:: CInt

Socket file descriptor

-> KeepAlive

Keep alive parameters

-> IO (Either KeepAliveError ()) 

Set keep alive parameters for the current socket

getKeepAliveOnOff Source #

Arguments

:: CInt

Socket file descriptor

-> IO Bool 

Returns True if keep alive is active for the specified socket