-- 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.3.1
-- | 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
-- | Generalization of runTCPServer
runTCPServerWithSocket :: (AddrInfo -> IO Socket) -> Maybe HostName -> ServiceName -> (Socket -> IO a) -> IO a
-- | Open socket for server use
--
-- The socket is configured to
--
--
-- - allow reuse of local addresses (SO_REUSEADDR)
-- - automatically be closed during a successful execve
-- (FD_CLOEXEC)
-- - bind to the address specified
--
openServerSocket :: AddrInfo -> IO Socket
-- | Simple functions to run TCP clients and servers.
module Network.Run.TCP.Timeout
-- | Running a TCP server with an accepted socket and its peer name.
runTCPServer :: Int -> Maybe HostName -> ServiceName -> TimeoutServer a -> IO a
-- | A server type
type TimeoutServer a = -- | A global timeout manager Manager -> -- | A thread-local timeout handler Handle -> -- | A connected socket Socket -> IO a
-- | Generalization of runTCPServer
--
-- See runTCPServerWithSocket for additional discussion.
runTCPServerWithSocket :: (AddrInfo -> IO Socket) -> Int -> Maybe HostName -> ServiceName -> TimeoutServer a -> IO a
openClientSocket :: AddrInfo -> IO Socket
-- | Open socket for server use
--
-- The socket is configured to
--
--
-- - allow reuse of local addresses (SO_REUSEADDR)
-- - automatically be closed during a successful execve
-- (FD_CLOEXEC)
-- - bind to the address specified
--
openServerSocket :: AddrInfo -> IO Socket
-- | 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 sendTo.
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 addrS:portS and a client connects to the service
-- from addrC:portC. A connected socket is created by binding to
-- *:portS and connecting to addrC:portC, resulting in
-- (UDP,addrS:portS,addrC:portC) where addrS is given
-- magically. This approach is fragile due to NAT rebidings.
runUDPServerFork :: [HostName] -> ServiceName -> (Socket -> ByteString -> IO ()) -> IO ()