-- Hoogle documentation, generated by Haddock
-- See Hoogle, http://www.haskell.org/hoogle/


-- | Simple network runner library
--   
--   Simple functions to run network clients and servers.
@package network-run
@version 0.2.4


-- | Simple functions to run TCP clients and servers.
module Network.Run.TCP

-- | Running a TCP client with a connected socket.
runTCPClient :: HostName -> ServiceName -> (Socket -> IO a) -> IO a

-- | Running a TCP server with an accepted socket and its peer name.
runTCPServer :: Maybe HostName -> ServiceName -> (Socket -> IO a) -> IO a


-- | Simple functions to run UDP clients and servers.
module Network.Run.UDP

-- | Running a UDP client with a socket. The client action takes a socket
--   and server's socket address. They should be used with <a>sendTo</a>.
runUDPClient :: HostName -> ServiceName -> (Socket -> SockAddr -> IO a) -> IO a

-- | Running a UDP server with an open socket in a single Haskell thread.
runUDPServer :: Maybe HostName -> ServiceName -> (Socket -> IO a) -> IO a

-- | Running a UDP server with a connected socket in each Haskell thread.
--   The first request is given to the server. Suppose that the server is
--   serving on <b>addrS:portS</b> and a client connects to the service
--   from <b>addrC:portC</b>. A connected socket is created by binding to
--   <b>*:portS</b> and connecting to <b>addrC:portC</b>, resulting in
--   <b>(UDP,addrS:portS,addrC:portC)</b> where <b>addrS</b> is given
--   magically. This approach is fragile due to NAT rebidings.
runUDPServerFork :: [HostName] -> ServiceName -> (Socket -> ByteString -> IO ()) -> IO ()
