MissingH-1.0.0: Large utility librarySource codeContentsIndex
Network.SocketServer
Portabilitysystems with networking
Stabilityexperimental
MaintainerJohn Goerzen <jgoerzen@complete.org>
Contents
Generic Options and Types
TCP server convenient setup
Lower-Level Processing
Combinators
Description

This module provides an infrastructure to simplify server design.

Written by John Goerzen, jgoerzen@complete.org

Please note: this module is designed to work with TCP, UDP, and Unix domain sockets, but only TCP sockets have been tested to date.

This module is presently under-documented. For an example of usage, please see the description of Network.FTP.Server.

Synopsis
data InetServerOptions = InetServerOptions {
listenQueueSize :: Int
portNumber :: PortNumber
interface :: HostAddress
reuse :: Bool
family :: Family
sockType :: SocketType
protoStr :: String
}
simpleTCPOptions :: Int -> InetServerOptions
data SocketServer = SocketServer {
optionsSS :: InetServerOptions
sockSS :: Socket
}
type HandlerT = Socket -> SockAddr -> SockAddr -> IO ()
serveTCPforever :: InetServerOptions -> HandlerT -> IO ()
setupSocketServer :: InetServerOptions -> IO SocketServer
handleOne :: SocketServer -> HandlerT -> IO ()
serveForever :: SocketServer -> HandlerT -> IO ()
closeSocketServer :: SocketServer -> IO ()
loggingHandler :: String -> Priority -> HandlerT -> HandlerT
threadedHandler :: HandlerT -> HandlerT
handleHandler :: (Handle -> SockAddr -> SockAddr -> IO ()) -> HandlerT
Generic Options and Types
data InetServerOptions Source
Options for your server.
Constructors
InetServerOptions
listenQueueSize :: Int
portNumber :: PortNumber
interface :: HostAddress
reuse :: Bool
family :: Family
sockType :: SocketType
protoStr :: String
show/hide Instances
simpleTCPOptionsSource
:: IntPort Number
-> InetServerOptions
Get Default options. You can always modify it later.
data SocketServer Source
Constructors
SocketServer
optionsSS :: InetServerOptions
sockSS :: Socket
show/hide Instances
type HandlerT = Socket -> SockAddr -> SockAddr -> IO ()Source

The main handler type.

The first parameter is the socket itself.

The second is the address of the remote endpoint.

The third is the address of the local endpoint.

TCP server convenient setup
serveTCPforeverSource
:: InetServerOptionsServer options
-> HandlerTHandler function
-> IO ()

Convenience function to completely set up a TCP SocketServer and handle all incoming requests.

This function is literally this:

serveTCPforever options func =
    do sockserv <- setupSocketServer options
       serveForever sockserv func
Lower-Level Processing
setupSocketServer :: InetServerOptions -> IO SocketServerSource
Takes some options and sets up the SocketServer. I will bind and begin listening, but will not accept any connections itself.
handleOne :: SocketServer -> HandlerT -> IO ()Source
Handle one incoming request from the given SocketServer.
serveForever :: SocketServer -> HandlerT -> IO ()Source
Handle all incoming requests from the given SocketServer.
closeSocketServer :: SocketServer -> IO ()Source
Close the socket server. Does not terminate active handlers, if any.
Combinators
loggingHandlerSource
:: StringName of logger to use
-> PriorityPriority of logged messages
-> HandlerTHandler to call after logging
-> HandlerTResulting handler

Log each incoming connection using the interface in System.Log.Logger.

Log when the incoming connection disconnects.

Also, log any failures that may occur in the child handler.

threadedHandlerSource
:: HandlerTHandler to call in the new thread
-> HandlerTResulting handler
Handle each incoming connection in its own thread to make the server multi-tasking.
handleHandlerSource
:: Handle -> SockAddr -> SockAddr -> IO ()Handler to call
-> HandlerT

Give your handler function a Handle instead of a Socket.

The Handle will be opened with ReadWriteMode (you use one handle for both directions of the Socket). Also, it will be initialized with LineBuffering.

Unlike other handlers, the handle will be closed when the function returns. Therefore, if you are doing threading, you should to it before you call this handler.

Produced by Haddock version 2.6.0