port-utils- Utilities for creating and waiting on ports

Safe HaskellNone




This internal modules exposes additional functions for testing. Use Wait instead |


Simple Wait Api

wait Source #


:: String


-> Int


-> IO () 

wait will attempt to connect to the given host and port repeated every 10 milliseconds until it is successful. It will throw an IOError if the host cannot be resolved.

A typical use case is to call wait in test code to wait for a server to start before trying to connect. For example:

   void $ forkIO $ Warp.run 7000 app
   -- Wait for the server to start listening on the socket
   wait "" 7000
   -- Communicate with the server

If you would like to control the delay or understand how many connection attempts were made use waitWith.


Advanced Wait Api

waitWith Source #


:: EventHandlers IO

A record of IO actions that are called during sp

-> Int

Microseconds to delay

-> String


-> Int


-> IO () 

Advanced usage. In most situations calling wait will suffice. This allows one to customize the delay between retries and debug the behavior of the function. wait is defined as

   wait = waitWith mempty defaultDelay


data EventHandlers m Source #

The EventHandlers is a record of IO actions that are called when interesting events occur in the lifecycle of the waitWith loop. One can pass in custom EventHandlers values to implement logging and other forms of instrumentation.

For example for debug one could print out each step using:

   printHandlers = EventHandlers
     { acting     = putStrLn "acting"
     , delaying   = putStrLn "delaying"
     , restarting = putStrLn "restarting"




  • connecting :: m ()

    Called before the socket is created for connection

  • delaying :: m ()

    Called after a failed attempt to connect before the thread is put to sleep.

  • restarting :: m ()

    Called before a recursive call to restart the connection attempt

defaultDelay :: Int Source #

The default delay between retries is 10000 microseconds (10 ms)

connectAction :: String -> Int -> IO Bool Source #

This function attempts to initiate a TCP connection to a given host and port. If the host does not exist it throws an IOError. If the connection fails it returns a False. If it connects it returns True.

waitM :: Monad m => EventHandlers m -> m () -> m Bool -> m () Source #

This function loops if the second argument returns False. Between the recursive calls it will call it's first argument.