-- Hoogle documentation, generated by Haddock -- See Hoogle, http://www.haskell.org/hoogle/ -- | Simple network sockets usage patterns. -- -- Simple network sockets usage patterns. -- -- See the NEWS file in the source distribution to learn about -- any important changes between version. @package network-simple @version 0.2.1.0 -- | This module exports functions that abstract simple TCP Socket -- usage patterns. module Network.Simple.TCP -- | Connect to a TCP server and use the connection. -- -- The connection socket is closed when done or in case of exceptions. -- -- If you prefer to acquire and close the socket yourself, then use -- connectSock and the sClose function from -- Network.Socket instead. connect :: HostName -> ServiceName -> ((Socket, SockAddr) -> IO r) -> IO r -- | Start a TCP server that accepts incoming connections and handles them -- concurrently in different threads. -- -- Any acquired network resources are properly closed and discarded when -- done or in case of exceptions. -- -- Note: This function performs listen and acceptFork, so -- you don't need to perform those manually. serve :: HostPreference -> ServiceName -> ((Socket, SockAddr) -> IO ()) -> IO () -- | Bind a TCP listening socket and use it. -- -- The listening socket is closed when done or in case of exceptions. -- -- If you prefer to acquire and close the socket yourself, then use -- bindSock and the listen and sClose functions from -- Network.Socket instead. -- -- Note: maxListenQueue is tipically 128, which is too small for -- high performance servers. So, we use the maximum between -- maxListenQueue and 2048 as the default size of the listening -- queue. The NoDelay and ReuseAddr options are set on the -- socket. listen :: HostPreference -> ServiceName -> ((Socket, SockAddr) -> IO r) -> IO r -- | Accept a single incoming connection and use it. -- -- The connection socket is closed when done or in case of exceptions. accept :: Socket -> ((Socket, SockAddr) -> IO b) -> IO b -- | Accept a single incoming connection and use it in a different thread. -- -- The connection socket is closed when done or in case of exceptions. acceptFork :: Socket -> ((Socket, SockAddr) -> IO ()) -> IO ThreadId -- | Read up to a limited number of bytes from a socket. -- -- Returns Nothing if the remote end closed the connection or -- end-of-input was reached. The number of returned bytes might be less -- than the specified limit. recv :: Socket -> Int -> IO (Maybe ByteString) -- | Writes the given bytes to the socket. send :: Socket -> ByteString -> IO () -- | Obtain a Socket bound to the given host name and TCP service -- port. -- -- The obtained Socket should be closed manually using -- sClose when it's not needed anymore. -- -- Prefer to use listen if you will be listening on this socket -- and using it within a limited scope, and would like it to be closed -- immediately after its usage or in case of exceptions. bindSock :: HostPreference -> ServiceName -> IO (Socket, SockAddr) -- | Obtain a Socket connected to the given host and TCP service -- port. -- -- The obtained Socket should be closed manually using -- sClose when it's not needed anymore, otherwise you risk having -- the socket open for much longer than needed. -- -- Prefer to use connect if you will be using the socket within a -- limited scope and would like it to be closed immediately after its -- usage or in case of exceptions. connectSock :: HostName -> ServiceName -> IO (Socket, SockAddr) -- | On Windows operating systems, the networking subsystem has to be -- initialised using withSocketsDo before any networking -- operations can be used. eg. -- --
-- main = withSocketsDo $ do {...}
--
--
-- Although this is only strictly necessary on Windows platforms, it is
-- harmless on other platforms, so for portability it is good practice to
-- use it all the time.
withSocketsDo :: IO a -> IO a
-- | Preferred host to bind.
data HostPreference
-- | Any available host.
HostAny :: HostPreference
-- | Any available IPv4 host.
HostIPv4 :: HostPreference
-- | Any available IPv6 host.
HostIPv6 :: HostPreference
-- | An explicit host name.
Host :: HostName -> HostPreference