Sophie

Sophie

distrib > Fedora > 14 > x86_64 > media > updates > by-pkgid > ec5844e219498f2057da8f8f3070d4a1 > files > 155

ghc-MissingH-devel-1.1.0.3-2.fc14.i686.rpm

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<!--Rendered using the Haskell Html Library v0.2-->
<HTML
><HEAD
><META HTTP-EQUIV="Content-Type" CONTENT="text/html; charset=UTF-8"
><TITLE
>Network.SocketServer</TITLE
><LINK HREF="haddock.css" REL="stylesheet" TYPE="text/css"
><SCRIPT SRC="haddock-util.js" TYPE="text/javascript"
></SCRIPT
><SCRIPT TYPE="text/javascript"
>window.onload = function () {setSynopsis("mini_Network-SocketServer.html")};</SCRIPT
></HEAD
><BODY
><TABLE CLASS="vanilla" CELLSPACING="0" CELLPADDING="0"
><TR
><TD CLASS="topbar"
><TABLE CLASS="vanilla" CELLSPACING="0" CELLPADDING="0"
><TR
><TD
><IMG SRC="haskell_icon.gif" WIDTH="16" HEIGHT="16" ALT=" "
></TD
><TD CLASS="title"
>MissingH-1.1.0.3: Large utility library</TD
><TD CLASS="topbut"
><A HREF="src/Network-SocketServer.html"
>Source code</A
></TD
><TD CLASS="topbut"
><A HREF="index.html"
>Contents</A
></TD
><TD CLASS="topbut"
><A HREF="doc-index.html"
>Index</A
></TD
></TR
></TABLE
></TD
></TR
><TR
><TD CLASS="modulebar"
><TABLE CLASS="vanilla" CELLSPACING="0" CELLPADDING="0"
><TR
><TD
><FONT SIZE="6"
>Network.SocketServer</FONT
></TD
><TD ALIGN="right"
><TABLE CLASS="narrow" CELLSPACING="0" CELLPADDING="0"
><TR
><TD CLASS="infohead"
>Portability</TD
><TD CLASS="infoval"
>systems with networking</TD
></TR
><TR
><TD CLASS="infohead"
>Stability</TD
><TD CLASS="infoval"
>experimental</TD
></TR
><TR
><TD CLASS="infohead"
>Maintainer</TD
><TD CLASS="infoval"
>John Goerzen &lt;jgoerzen@complete.org&gt; </TD
></TR
></TABLE
></TD
></TR
></TABLE
></TD
></TR
><TR
><TD CLASS="s15"
></TD
></TR
><TR
><TD
><TABLE CLASS="vanilla" CELLSPACING="0" CELLPADDING="0"
><TR
><TD CLASS="section4"
><B
>Contents</B
></TD
></TR
><TR
><TD
><DL
><DT
><A HREF="#1"
>Generic Options and Types
</A
></DT
><DT
><A HREF="#2"
>TCP server convenient setup
</A
></DT
><DT
><A HREF="#3"
>Lower-Level Processing
</A
></DT
><DT
><A HREF="#4"
>Combinators
</A
></DT
></DL
></TD
></TR
></TABLE
></TD
></TR
><TR
><TD CLASS="s15"
></TD
></TR
><TR
><TD CLASS="section1"
>Description</TD
></TR
><TR
><TD CLASS="doc"
><P
>This module provides an infrastructure to simplify server design.
</P
><P
>Written by John Goerzen, jgoerzen@complete.org
</P
><P
>Please note: this module is designed to work with TCP, UDP, and Unix domain
sockets, but only TCP sockets have been tested to date.
</P
><P
>This module is presently under-documented.  For an example of usage, please
see the description of <A HREF="Network-FTP-Server.html"
>Network.FTP.Server</A
>.
</P
></TD
></TR
><TR
><TD CLASS="s15"
></TD
></TR
><TR
><TD CLASS="section1"
>Synopsis</TD
></TR
><TR
><TD CLASS="s15"
></TD
></TR
><TR
><TD CLASS="body"
><TABLE CLASS="vanilla" CELLSPACING="0" CELLPADDING="0"
><TR
><TD CLASS="decl"
><SPAN CLASS="keyword"
>data</SPAN
>  <A HREF="#t%3AInetServerOptions"
>InetServerOptions</A
>  = <A HREF="#v%3AInetServerOptions"
>InetServerOptions</A
> {<TABLE CLASS="vanilla" CELLSPACING="0" CELLPADDING="0"
><TR
><TD CLASS="recfield"
><A HREF="#v%3AlistenQueueSize"
>listenQueueSize</A
> :: <A HREF="/usr/share/doc/ghc/html/libraries/base-4.2.0.2/Data-Int.html#t%3AInt"
>Int</A
></TD
></TR
><TR
><TD CLASS="recfield"
><A HREF="#v%3AportNumber"
>portNumber</A
> :: <A HREF="/usr/share/doc/ghc/html/libraries/network-2.2.1.7/Network-Socket-Internal.html#t%3APortNumber"
>PortNumber</A
></TD
></TR
><TR
><TD CLASS="recfield"
><A HREF="#v%3Ainterface"
>interface</A
> :: <A HREF="/usr/share/doc/ghc/html/libraries/network-2.2.1.7/Network-Socket-Internal.html#t%3AHostAddress"
>HostAddress</A
></TD
></TR
><TR
><TD CLASS="recfield"
><A HREF="#v%3Areuse"
>reuse</A
> :: <A HREF="/usr/share/doc/ghc/html/libraries/base-4.2.0.2/Data-Bool.html#t%3ABool"
>Bool</A
></TD
></TR
><TR
><TD CLASS="recfield"
><A HREF="#v%3Afamily"
>family</A
> :: <A HREF="/usr/share/doc/ghc/html/libraries/network-2.2.1.7/Network-Socket-Internal.html#t%3AFamily"
>Family</A
></TD
></TR
><TR
><TD CLASS="recfield"
><A HREF="#v%3AsockType"
>sockType</A
> :: <A HREF="/usr/share/doc/ghc/html/libraries/network-2.2.1.7/Network-Socket.html#t%3ASocketType"
>SocketType</A
></TD
></TR
><TR
><TD CLASS="recfield"
><A HREF="#v%3AprotoStr"
>protoStr</A
> :: <A HREF="/usr/share/doc/ghc/html/libraries/base-4.2.0.2/Data-Char.html#t%3AString"
>String</A
></TD
></TR
></TABLE
>}</TD
></TR
><TR
><TD CLASS="s8"
></TD
></TR
><TR
><TD CLASS="decl"
><A HREF="#v%3AsimpleTCPOptions"
>simpleTCPOptions</A
> :: <A HREF="/usr/share/doc/ghc/html/libraries/base-4.2.0.2/Data-Int.html#t%3AInt"
>Int</A
> -&gt; <A HREF="Network-SocketServer.html#t%3AInetServerOptions"
>InetServerOptions</A
></TD
></TR
><TR
><TD CLASS="s8"
></TD
></TR
><TR
><TD CLASS="decl"
><SPAN CLASS="keyword"
>data</SPAN
>  <A HREF="#t%3ASocketServer"
>SocketServer</A
>  = <A HREF="#v%3ASocketServer"
>SocketServer</A
> {<TABLE CLASS="vanilla" CELLSPACING="0" CELLPADDING="0"
><TR
><TD CLASS="recfield"
><A HREF="#v%3AoptionsSS"
>optionsSS</A
> :: <A HREF="Network-SocketServer.html#t%3AInetServerOptions"
>InetServerOptions</A
></TD
></TR
><TR
><TD CLASS="recfield"
><A HREF="#v%3AsockSS"
>sockSS</A
> :: <A HREF="/usr/share/doc/ghc/html/libraries/network-2.2.1.7/Network-Socket.html#t%3ASocket"
>Socket</A
></TD
></TR
></TABLE
>}</TD
></TR
><TR
><TD CLASS="s8"
></TD
></TR
><TR
><TD CLASS="decl"
><SPAN CLASS="keyword"
>type</SPAN
> <A HREF="#t%3AHandlerT"
>HandlerT</A
> = <A HREF="/usr/share/doc/ghc/html/libraries/network-2.2.1.7/Network-Socket.html#t%3ASocket"
>Socket</A
> -&gt; <A HREF="/usr/share/doc/ghc/html/libraries/network-2.2.1.7/Network-Socket-Internal.html#t%3ASockAddr"
>SockAddr</A
> -&gt; <A HREF="/usr/share/doc/ghc/html/libraries/network-2.2.1.7/Network-Socket-Internal.html#t%3ASockAddr"
>SockAddr</A
> -&gt; <A HREF="/usr/share/doc/ghc/html/libraries/base-4.2.0.2/System-IO.html#t%3AIO"
>IO</A
> <A HREF="/usr/share/doc/ghc/html/libraries/ghc-prim-0.2.0.0/GHC-Unit.html#t%3A%28%29"
>()</A
></TD
></TR
><TR
><TD CLASS="s8"
></TD
></TR
><TR
><TD CLASS="decl"
><A HREF="#v%3AserveTCPforever"
>serveTCPforever</A
> :: <A HREF="Network-SocketServer.html#t%3AInetServerOptions"
>InetServerOptions</A
> -&gt; <A HREF="Network-SocketServer.html#t%3AHandlerT"
>HandlerT</A
> -&gt; <A HREF="/usr/share/doc/ghc/html/libraries/base-4.2.0.2/System-IO.html#t%3AIO"
>IO</A
> <A HREF="/usr/share/doc/ghc/html/libraries/ghc-prim-0.2.0.0/GHC-Unit.html#t%3A%28%29"
>()</A
></TD
></TR
><TR
><TD CLASS="s8"
></TD
></TR
><TR
><TD CLASS="decl"
><A HREF="#v%3AsetupSocketServer"
>setupSocketServer</A
> :: <A HREF="Network-SocketServer.html#t%3AInetServerOptions"
>InetServerOptions</A
> -&gt; <A HREF="/usr/share/doc/ghc/html/libraries/base-4.2.0.2/System-IO.html#t%3AIO"
>IO</A
> <A HREF="Network-SocketServer.html#t%3ASocketServer"
>SocketServer</A
></TD
></TR
><TR
><TD CLASS="s8"
></TD
></TR
><TR
><TD CLASS="decl"
><A HREF="#v%3AhandleOne"
>handleOne</A
> :: <A HREF="Network-SocketServer.html#t%3ASocketServer"
>SocketServer</A
> -&gt; <A HREF="Network-SocketServer.html#t%3AHandlerT"
>HandlerT</A
> -&gt; <A HREF="/usr/share/doc/ghc/html/libraries/base-4.2.0.2/System-IO.html#t%3AIO"
>IO</A
> <A HREF="/usr/share/doc/ghc/html/libraries/ghc-prim-0.2.0.0/GHC-Unit.html#t%3A%28%29"
>()</A
></TD
></TR
><TR
><TD CLASS="s8"
></TD
></TR
><TR
><TD CLASS="decl"
><A HREF="#v%3AserveForever"
>serveForever</A
> :: <A HREF="Network-SocketServer.html#t%3ASocketServer"
>SocketServer</A
> -&gt; <A HREF="Network-SocketServer.html#t%3AHandlerT"
>HandlerT</A
> -&gt; <A HREF="/usr/share/doc/ghc/html/libraries/base-4.2.0.2/System-IO.html#t%3AIO"
>IO</A
> <A HREF="/usr/share/doc/ghc/html/libraries/ghc-prim-0.2.0.0/GHC-Unit.html#t%3A%28%29"
>()</A
></TD
></TR
><TR
><TD CLASS="s8"
></TD
></TR
><TR
><TD CLASS="decl"
><A HREF="#v%3AcloseSocketServer"
>closeSocketServer</A
> :: <A HREF="Network-SocketServer.html#t%3ASocketServer"
>SocketServer</A
> -&gt; <A HREF="/usr/share/doc/ghc/html/libraries/base-4.2.0.2/System-IO.html#t%3AIO"
>IO</A
> <A HREF="/usr/share/doc/ghc/html/libraries/ghc-prim-0.2.0.0/GHC-Unit.html#t%3A%28%29"
>()</A
></TD
></TR
><TR
><TD CLASS="s8"
></TD
></TR
><TR
><TD CLASS="decl"
><A HREF="#v%3AloggingHandler"
>loggingHandler</A
> :: <A HREF="/usr/share/doc/ghc/html/libraries/base-4.2.0.2/Data-Char.html#t%3AString"
>String</A
> -&gt; <A HREF="/usr/share/doc/ghc/html/libraries/hslogger-1.1.0/System-Log.html#t%3APriority"
>Priority</A
> -&gt; <A HREF="Network-SocketServer.html#t%3AHandlerT"
>HandlerT</A
> -&gt; <A HREF="Network-SocketServer.html#t%3AHandlerT"
>HandlerT</A
></TD
></TR
><TR
><TD CLASS="s8"
></TD
></TR
><TR
><TD CLASS="decl"
><A HREF="#v%3AthreadedHandler"
>threadedHandler</A
> :: <A HREF="Network-SocketServer.html#t%3AHandlerT"
>HandlerT</A
> -&gt; <A HREF="Network-SocketServer.html#t%3AHandlerT"
>HandlerT</A
></TD
></TR
><TR
><TD CLASS="s8"
></TD
></TR
><TR
><TD CLASS="decl"
><A HREF="#v%3AhandleHandler"
>handleHandler</A
> :: (<A HREF="/usr/share/doc/ghc/html/libraries/base-4.2.0.2/GHC-IO-Handle.html#t%3AHandle"
>Handle</A
> -&gt; <A HREF="/usr/share/doc/ghc/html/libraries/network-2.2.1.7/Network-Socket-Internal.html#t%3ASockAddr"
>SockAddr</A
> -&gt; <A HREF="/usr/share/doc/ghc/html/libraries/network-2.2.1.7/Network-Socket-Internal.html#t%3ASockAddr"
>SockAddr</A
> -&gt; <A HREF="/usr/share/doc/ghc/html/libraries/base-4.2.0.2/System-IO.html#t%3AIO"
>IO</A
> <A HREF="/usr/share/doc/ghc/html/libraries/ghc-prim-0.2.0.0/GHC-Unit.html#t%3A%28%29"
>()</A
>) -&gt; <A HREF="Network-SocketServer.html#t%3AHandlerT"
>HandlerT</A
></TD
></TR
></TABLE
></TD
></TR
><TR
><TD CLASS="s15"
></TD
></TR
><TR
><TD CLASS="s15"
></TD
></TR
><TR
><TD CLASS="section1"
><A NAME="1"
><A NAME="1"
>Generic Options and Types
</A
></A
></TD
></TR
><TR
><TD CLASS="s15"
></TD
></TR
><TR
><TD CLASS="topdecl"
><TABLE CLASS="declbar"
><TR
><TD CLASS="declname"
><SPAN CLASS="keyword"
>data</SPAN
>  <A NAME="t:InetServerOptions"
><A NAME="t%3AInetServerOptions"
></A
></A
><B
>InetServerOptions</B
>  </TD
><TD CLASS="declbut"
><A HREF="src/Network-SocketServer.html#InetServerOptions"
>Source</A
></TD
></TR
></TABLE
></TD
></TR
><TR
><TD CLASS="body"
><TABLE CLASS="vanilla" CELLSPACING="0" CELLPADDING="0"
><TR
><TD CLASS="ndoc"
>Options for your server. 
</TD
></TR
><TR
><TD CLASS="section4"
>Constructors</TD
></TR
><TR
><TD CLASS="body"
><TABLE CLASS="vanilla" CELLSPACING="5" CELLPADDING="0"
><TR
><TD CLASS="arg"
><A NAME="v:InetServerOptions"
><A NAME="v%3AInetServerOptions"
></A
></A
><B
>InetServerOptions</B
></TD
><TD CLASS="rdoc"
></TD
></TR
><TR
><TD CLASS="body" COLSPAN="2"
><TABLE CLASS="vanilla" CELLSPACING="1" CELLPADDING="0"
><TR
><TD CLASS="arg"
><A NAME="v:listenQueueSize"
><A NAME="v%3AlistenQueueSize"
></A
></A
><B
>listenQueueSize</B
> :: <A HREF="/usr/share/doc/ghc/html/libraries/base-4.2.0.2/Data-Int.html#t%3AInt"
>Int</A
></TD
><TD CLASS="rdoc"
></TD
></TR
><TR
><TD CLASS="arg"
><A NAME="v:portNumber"
><A NAME="v%3AportNumber"
></A
></A
><B
>portNumber</B
> :: <A HREF="/usr/share/doc/ghc/html/libraries/network-2.2.1.7/Network-Socket-Internal.html#t%3APortNumber"
>PortNumber</A
></TD
><TD CLASS="rdoc"
></TD
></TR
><TR
><TD CLASS="arg"
><A NAME="v:interface"
><A NAME="v%3Ainterface"
></A
></A
><B
>interface</B
> :: <A HREF="/usr/share/doc/ghc/html/libraries/network-2.2.1.7/Network-Socket-Internal.html#t%3AHostAddress"
>HostAddress</A
></TD
><TD CLASS="rdoc"
></TD
></TR
><TR
><TD CLASS="arg"
><A NAME="v:reuse"
><A NAME="v%3Areuse"
></A
></A
><B
>reuse</B
> :: <A HREF="/usr/share/doc/ghc/html/libraries/base-4.2.0.2/Data-Bool.html#t%3ABool"
>Bool</A
></TD
><TD CLASS="rdoc"
></TD
></TR
><TR
><TD CLASS="arg"
><A NAME="v:family"
><A NAME="v%3Afamily"
></A
></A
><B
>family</B
> :: <A HREF="/usr/share/doc/ghc/html/libraries/network-2.2.1.7/Network-Socket-Internal.html#t%3AFamily"
>Family</A
></TD
><TD CLASS="rdoc"
></TD
></TR
><TR
><TD CLASS="arg"
><A NAME="v:sockType"
><A NAME="v%3AsockType"
></A
></A
><B
>sockType</B
> :: <A HREF="/usr/share/doc/ghc/html/libraries/network-2.2.1.7/Network-Socket.html#t%3ASocketType"
>SocketType</A
></TD
><TD CLASS="rdoc"
></TD
></TR
><TR
><TD CLASS="arg"
><A NAME="v:protoStr"
><A NAME="v%3AprotoStr"
></A
></A
><B
>protoStr</B
> :: <A HREF="/usr/share/doc/ghc/html/libraries/base-4.2.0.2/Data-Char.html#t%3AString"
>String</A
></TD
><TD CLASS="rdoc"
></TD
></TR
></TABLE
></TD
></TR
></TABLE
></TD
></TR
><TR
><TD CLASS="section4"
><IMG SRC="minus.gif" CLASS="coll" ONCLICK="toggle(this,'i:InetServerOptions')" ALT="show/hide"
> Instances</TD
></TR
><TR
><TD CLASS="body"
><DIV ID="i:InetServerOptions" STYLE="display:block;"
><TABLE CLASS="vanilla" CELLSPACING="1" CELLPADDING="0"
><TR
><TD CLASS="decl"
><A HREF="/usr/share/doc/ghc/html/libraries/base-4.2.0.2/Data-Eq.html#t%3AEq"
>Eq</A
> <A HREF="Network-SocketServer.html#t%3AInetServerOptions"
>InetServerOptions</A
></TD
></TR
><TR
><TD CLASS="decl"
><A HREF="/usr/share/doc/ghc/html/libraries/base-4.2.0.2/Text-Show.html#t%3AShow"
>Show</A
> <A HREF="Network-SocketServer.html#t%3AInetServerOptions"
>InetServerOptions</A
></TD
></TR
></TABLE
></DIV
></TD
></TR
></TABLE
></TD
></TR
><TR
><TD CLASS="s15"
></TD
></TR
><TR
><TD CLASS="topdecl"
><TABLE CLASS="declbar"
><TR
><TD CLASS="declname"
><A NAME="v:simpleTCPOptions"
><A NAME="v%3AsimpleTCPOptions"
></A
></A
><B
>simpleTCPOptions</B
></TD
><TD CLASS="declbut"
><A HREF="src/Network-SocketServer.html#simpleTCPOptions"
>Source</A
></TD
></TR
></TABLE
></TD
></TR
><TR
><TD CLASS="body"
><TABLE CLASS="vanilla" CELLSPACING="0" CELLPADDING="0"
><TR
><TD CLASS="arg"
>:: <A HREF="/usr/share/doc/ghc/html/libraries/base-4.2.0.2/Data-Int.html#t%3AInt"
>Int</A
></TD
><TD CLASS="rdoc"
>Port Number
</TD
></TR
><TR
><TD CLASS="arg"
>-&gt; <A HREF="Network-SocketServer.html#t%3AInetServerOptions"
>InetServerOptions</A
></TD
><TD CLASS="rdoc"
></TD
></TR
><TR
><TD CLASS="ndoc" COLSPAN="2"
>Get Default options.  You can always modify it later. 
</TD
></TR
></TABLE
></TD
></TR
><TR
><TD CLASS="s15"
></TD
></TR
><TR
><TD CLASS="topdecl"
><TABLE CLASS="declbar"
><TR
><TD CLASS="declname"
><SPAN CLASS="keyword"
>data</SPAN
>  <A NAME="t:SocketServer"
><A NAME="t%3ASocketServer"
></A
></A
><B
>SocketServer</B
>  </TD
><TD CLASS="declbut"
><A HREF="src/Network-SocketServer.html#SocketServer"
>Source</A
></TD
></TR
></TABLE
></TD
></TR
><TR
><TD CLASS="body"
><TABLE CLASS="vanilla" CELLSPACING="0" CELLPADDING="0"
><TR
><TD CLASS="section4"
>Constructors</TD
></TR
><TR
><TD CLASS="body"
><TABLE CLASS="vanilla" CELLSPACING="5" CELLPADDING="0"
><TR
><TD CLASS="arg"
><A NAME="v:SocketServer"
><A NAME="v%3ASocketServer"
></A
></A
><B
>SocketServer</B
></TD
><TD CLASS="rdoc"
></TD
></TR
><TR
><TD CLASS="body" COLSPAN="2"
><TABLE CLASS="vanilla" CELLSPACING="1" CELLPADDING="0"
><TR
><TD CLASS="arg"
><A NAME="v:optionsSS"
><A NAME="v%3AoptionsSS"
></A
></A
><B
>optionsSS</B
> :: <A HREF="Network-SocketServer.html#t%3AInetServerOptions"
>InetServerOptions</A
></TD
><TD CLASS="rdoc"
></TD
></TR
><TR
><TD CLASS="arg"
><A NAME="v:sockSS"
><A NAME="v%3AsockSS"
></A
></A
><B
>sockSS</B
> :: <A HREF="/usr/share/doc/ghc/html/libraries/network-2.2.1.7/Network-Socket.html#t%3ASocket"
>Socket</A
></TD
><TD CLASS="rdoc"
></TD
></TR
></TABLE
></TD
></TR
></TABLE
></TD
></TR
><TR
><TD CLASS="section4"
><IMG SRC="minus.gif" CLASS="coll" ONCLICK="toggle(this,'i:SocketServer')" ALT="show/hide"
> Instances</TD
></TR
><TR
><TD CLASS="body"
><DIV ID="i:SocketServer" STYLE="display:block;"
><TABLE CLASS="vanilla" CELLSPACING="1" CELLPADDING="0"
><TR
><TD CLASS="decl"
><A HREF="/usr/share/doc/ghc/html/libraries/base-4.2.0.2/Data-Eq.html#t%3AEq"
>Eq</A
> <A HREF="Network-SocketServer.html#t%3ASocketServer"
>SocketServer</A
></TD
></TR
><TR
><TD CLASS="decl"
><A HREF="/usr/share/doc/ghc/html/libraries/base-4.2.0.2/Text-Show.html#t%3AShow"
>Show</A
> <A HREF="Network-SocketServer.html#t%3ASocketServer"
>SocketServer</A
></TD
></TR
></TABLE
></DIV
></TD
></TR
></TABLE
></TD
></TR
><TR
><TD CLASS="s15"
></TD
></TR
><TR
><TD CLASS="topdecl"
><TABLE CLASS="declbar"
><TR
><TD CLASS="declname"
><SPAN CLASS="keyword"
>type</SPAN
> <A NAME="t:HandlerT"
><A NAME="t%3AHandlerT"
></A
></A
><B
>HandlerT</B
> = <A HREF="/usr/share/doc/ghc/html/libraries/network-2.2.1.7/Network-Socket.html#t%3ASocket"
>Socket</A
> -&gt; <A HREF="/usr/share/doc/ghc/html/libraries/network-2.2.1.7/Network-Socket-Internal.html#t%3ASockAddr"
>SockAddr</A
> -&gt; <A HREF="/usr/share/doc/ghc/html/libraries/network-2.2.1.7/Network-Socket-Internal.html#t%3ASockAddr"
>SockAddr</A
> -&gt; <A HREF="/usr/share/doc/ghc/html/libraries/base-4.2.0.2/System-IO.html#t%3AIO"
>IO</A
> <A HREF="/usr/share/doc/ghc/html/libraries/ghc-prim-0.2.0.0/GHC-Unit.html#t%3A%28%29"
>()</A
></TD
><TD CLASS="declbut"
><A HREF="src/Network-SocketServer.html#HandlerT"
>Source</A
></TD
></TR
></TABLE
></TD
></TR
><TR
><TD CLASS="doc"
><P
>The main handler type.
</P
><P
>The first parameter is the socket itself.
</P
><P
>The second is the address of the remote endpoint.
</P
><P
>The third is the address of the local endpoint.
</P
></TD
></TR
><TR
><TD CLASS="s15"
></TD
></TR
><TR
><TD CLASS="section1"
><A NAME="2"
><A NAME="2"
>TCP server convenient setup
</A
></A
></TD
></TR
><TR
><TD CLASS="s15"
></TD
></TR
><TR
><TD CLASS="topdecl"
><TABLE CLASS="declbar"
><TR
><TD CLASS="declname"
><A NAME="v:serveTCPforever"
><A NAME="v%3AserveTCPforever"
></A
></A
><B
>serveTCPforever</B
></TD
><TD CLASS="declbut"
><A HREF="src/Network-SocketServer.html#serveTCPforever"
>Source</A
></TD
></TR
></TABLE
></TD
></TR
><TR
><TD CLASS="body"
><TABLE CLASS="vanilla" CELLSPACING="0" CELLPADDING="0"
><TR
><TD CLASS="arg"
>:: <A HREF="Network-SocketServer.html#t%3AInetServerOptions"
>InetServerOptions</A
></TD
><TD CLASS="rdoc"
>Server options
</TD
></TR
><TR
><TD CLASS="arg"
>-&gt; <A HREF="Network-SocketServer.html#t%3AHandlerT"
>HandlerT</A
></TD
><TD CLASS="rdoc"
>Handler function
</TD
></TR
><TR
><TD CLASS="arg"
>-&gt; <A HREF="/usr/share/doc/ghc/html/libraries/base-4.2.0.2/System-IO.html#t%3AIO"
>IO</A
> <A HREF="/usr/share/doc/ghc/html/libraries/ghc-prim-0.2.0.0/GHC-Unit.html#t%3A%28%29"
>()</A
></TD
><TD CLASS="rdoc"
></TD
></TR
><TR
><TD CLASS="ndoc" COLSPAN="2"
><P
>Convenience function to completely set up a TCP
<TT
><A HREF="Network-SocketServer.html#t%3ASocketServer"
>SocketServer</A
></TT
> and handle all incoming requests.
</P
><P
>This function is literally this:
</P
><PRE
>serveTCPforever options func =
    do sockserv &lt;- setupSocketServer options
       serveForever sockserv func
</PRE
></TD
></TR
></TABLE
></TD
></TR
><TR
><TD CLASS="s15"
></TD
></TR
><TR
><TD CLASS="section1"
><A NAME="3"
><A NAME="3"
>Lower-Level Processing
</A
></A
></TD
></TR
><TR
><TD CLASS="s15"
></TD
></TR
><TR
><TD CLASS="topdecl"
><TABLE CLASS="declbar"
><TR
><TD CLASS="declname"
><A NAME="v:setupSocketServer"
><A NAME="v%3AsetupSocketServer"
></A
></A
><B
>setupSocketServer</B
> :: <A HREF="Network-SocketServer.html#t%3AInetServerOptions"
>InetServerOptions</A
> -&gt; <A HREF="/usr/share/doc/ghc/html/libraries/base-4.2.0.2/System-IO.html#t%3AIO"
>IO</A
> <A HREF="Network-SocketServer.html#t%3ASocketServer"
>SocketServer</A
></TD
><TD CLASS="declbut"
><A HREF="src/Network-SocketServer.html#setupSocketServer"
>Source</A
></TD
></TR
></TABLE
></TD
></TR
><TR
><TD CLASS="doc"
>Takes some options and sets up the <TT
><A HREF="Network-SocketServer.html#t%3ASocketServer"
>SocketServer</A
></TT
>.  I will bind
and begin listening, but will not accept any connections itself. 
</TD
></TR
><TR
><TD CLASS="s15"
></TD
></TR
><TR
><TD CLASS="topdecl"
><TABLE CLASS="declbar"
><TR
><TD CLASS="declname"
><A NAME="v:handleOne"
><A NAME="v%3AhandleOne"
></A
></A
><B
>handleOne</B
> :: <A HREF="Network-SocketServer.html#t%3ASocketServer"
>SocketServer</A
> -&gt; <A HREF="Network-SocketServer.html#t%3AHandlerT"
>HandlerT</A
> -&gt; <A HREF="/usr/share/doc/ghc/html/libraries/base-4.2.0.2/System-IO.html#t%3AIO"
>IO</A
> <A HREF="/usr/share/doc/ghc/html/libraries/ghc-prim-0.2.0.0/GHC-Unit.html#t%3A%28%29"
>()</A
></TD
><TD CLASS="declbut"
><A HREF="src/Network-SocketServer.html#handleOne"
>Source</A
></TD
></TR
></TABLE
></TD
></TR
><TR
><TD CLASS="doc"
>Handle one incoming request from the given <TT
><A HREF="Network-SocketServer.html#t%3ASocketServer"
>SocketServer</A
></TT
>. 
</TD
></TR
><TR
><TD CLASS="s15"
></TD
></TR
><TR
><TD CLASS="topdecl"
><TABLE CLASS="declbar"
><TR
><TD CLASS="declname"
><A NAME="v:serveForever"
><A NAME="v%3AserveForever"
></A
></A
><B
>serveForever</B
> :: <A HREF="Network-SocketServer.html#t%3ASocketServer"
>SocketServer</A
> -&gt; <A HREF="Network-SocketServer.html#t%3AHandlerT"
>HandlerT</A
> -&gt; <A HREF="/usr/share/doc/ghc/html/libraries/base-4.2.0.2/System-IO.html#t%3AIO"
>IO</A
> <A HREF="/usr/share/doc/ghc/html/libraries/ghc-prim-0.2.0.0/GHC-Unit.html#t%3A%28%29"
>()</A
></TD
><TD CLASS="declbut"
><A HREF="src/Network-SocketServer.html#serveForever"
>Source</A
></TD
></TR
></TABLE
></TD
></TR
><TR
><TD CLASS="doc"
>Handle all incoming requests from the given <TT
><A HREF="Network-SocketServer.html#t%3ASocketServer"
>SocketServer</A
></TT
>. 
</TD
></TR
><TR
><TD CLASS="s15"
></TD
></TR
><TR
><TD CLASS="topdecl"
><TABLE CLASS="declbar"
><TR
><TD CLASS="declname"
><A NAME="v:closeSocketServer"
><A NAME="v%3AcloseSocketServer"
></A
></A
><B
>closeSocketServer</B
> :: <A HREF="Network-SocketServer.html#t%3ASocketServer"
>SocketServer</A
> -&gt; <A HREF="/usr/share/doc/ghc/html/libraries/base-4.2.0.2/System-IO.html#t%3AIO"
>IO</A
> <A HREF="/usr/share/doc/ghc/html/libraries/ghc-prim-0.2.0.0/GHC-Unit.html#t%3A%28%29"
>()</A
></TD
><TD CLASS="declbut"
><A HREF="src/Network-SocketServer.html#closeSocketServer"
>Source</A
></TD
></TR
></TABLE
></TD
></TR
><TR
><TD CLASS="doc"
>Close the socket server.  Does not terminate active
handlers, if any. 
</TD
></TR
><TR
><TD CLASS="s15"
></TD
></TR
><TR
><TD CLASS="section1"
><A NAME="4"
><A NAME="4"
>Combinators
</A
></A
></TD
></TR
><TR
><TD CLASS="s15"
></TD
></TR
><TR
><TD CLASS="topdecl"
><TABLE CLASS="declbar"
><TR
><TD CLASS="declname"
><A NAME="v:loggingHandler"
><A NAME="v%3AloggingHandler"
></A
></A
><B
>loggingHandler</B
></TD
><TD CLASS="declbut"
><A HREF="src/Network-SocketServer.html#loggingHandler"
>Source</A
></TD
></TR
></TABLE
></TD
></TR
><TR
><TD CLASS="body"
><TABLE CLASS="vanilla" CELLSPACING="0" CELLPADDING="0"
><TR
><TD CLASS="arg"
>:: <A HREF="/usr/share/doc/ghc/html/libraries/base-4.2.0.2/Data-Char.html#t%3AString"
>String</A
></TD
><TD CLASS="rdoc"
>Name of logger to use
</TD
></TR
><TR
><TD CLASS="arg"
>-&gt; <A HREF="/usr/share/doc/ghc/html/libraries/hslogger-1.1.0/System-Log.html#t%3APriority"
>Priority</A
></TD
><TD CLASS="rdoc"
>Priority of logged messages
</TD
></TR
><TR
><TD CLASS="arg"
>-&gt; <A HREF="Network-SocketServer.html#t%3AHandlerT"
>HandlerT</A
></TD
><TD CLASS="rdoc"
>Handler to call after logging
</TD
></TR
><TR
><TD CLASS="arg"
>-&gt; <A HREF="Network-SocketServer.html#t%3AHandlerT"
>HandlerT</A
></TD
><TD CLASS="rdoc"
>Resulting handler
</TD
></TR
><TR
><TD CLASS="ndoc" COLSPAN="2"
><P
>Log each incoming connection using the interface in
<A HREF="System-Log-Logger.html"
>System.Log.Logger</A
>.
</P
><P
>Log when the incoming connection disconnects.
</P
><P
>Also, log any failures that may occur in the child handler. 
</P
></TD
></TR
></TABLE
></TD
></TR
><TR
><TD CLASS="s15"
></TD
></TR
><TR
><TD CLASS="topdecl"
><TABLE CLASS="declbar"
><TR
><TD CLASS="declname"
><A NAME="v:threadedHandler"
><A NAME="v%3AthreadedHandler"
></A
></A
><B
>threadedHandler</B
></TD
><TD CLASS="declbut"
><A HREF="src/Network-SocketServer.html#threadedHandler"
>Source</A
></TD
></TR
></TABLE
></TD
></TR
><TR
><TD CLASS="body"
><TABLE CLASS="vanilla" CELLSPACING="0" CELLPADDING="0"
><TR
><TD CLASS="arg"
>:: <A HREF="Network-SocketServer.html#t%3AHandlerT"
>HandlerT</A
></TD
><TD CLASS="rdoc"
>Handler to call in the new thread
</TD
></TR
><TR
><TD CLASS="arg"
>-&gt; <A HREF="Network-SocketServer.html#t%3AHandlerT"
>HandlerT</A
></TD
><TD CLASS="rdoc"
>Resulting handler
</TD
></TR
><TR
><TD CLASS="ndoc" COLSPAN="2"
>Handle each incoming connection in its own thread to
 make the server multi-tasking.
</TD
></TR
></TABLE
></TD
></TR
><TR
><TD CLASS="s15"
></TD
></TR
><TR
><TD CLASS="topdecl"
><TABLE CLASS="declbar"
><TR
><TD CLASS="declname"
><A NAME="v:handleHandler"
><A NAME="v%3AhandleHandler"
></A
></A
><B
>handleHandler</B
></TD
><TD CLASS="declbut"
><A HREF="src/Network-SocketServer.html#handleHandler"
>Source</A
></TD
></TR
></TABLE
></TD
></TR
><TR
><TD CLASS="body"
><TABLE CLASS="vanilla" CELLSPACING="0" CELLPADDING="0"
><TR
><TD CLASS="arg"
>:: <A HREF="/usr/share/doc/ghc/html/libraries/base-4.2.0.2/GHC-IO-Handle.html#t%3AHandle"
>Handle</A
> -&gt; <A HREF="/usr/share/doc/ghc/html/libraries/network-2.2.1.7/Network-Socket-Internal.html#t%3ASockAddr"
>SockAddr</A
> -&gt; <A HREF="/usr/share/doc/ghc/html/libraries/network-2.2.1.7/Network-Socket-Internal.html#t%3ASockAddr"
>SockAddr</A
> -&gt; <A HREF="/usr/share/doc/ghc/html/libraries/base-4.2.0.2/System-IO.html#t%3AIO"
>IO</A
> <A HREF="/usr/share/doc/ghc/html/libraries/ghc-prim-0.2.0.0/GHC-Unit.html#t%3A%28%29"
>()</A
></TD
><TD CLASS="rdoc"
>Handler to call
</TD
></TR
><TR
><TD CLASS="arg"
>-&gt; <A HREF="Network-SocketServer.html#t%3AHandlerT"
>HandlerT</A
></TD
><TD CLASS="rdoc"
></TD
></TR
><TR
><TD CLASS="ndoc" COLSPAN="2"
><P
>Give your handler function a Handle instead of a Socket.
</P
><P
>The Handle will be opened with ReadWriteMode (you use one handle for both
directions of the Socket).  Also, it will be initialized with LineBuffering.
</P
><P
>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.
</P
></TD
></TR
></TABLE
></TD
></TR
><TR
><TD CLASS="s15"
></TD
></TR
><TR
><TD CLASS="botbar"
>Produced by <A HREF="http://www.haskell.org/haddock/"
>Haddock</A
> version 2.6.1</TD
></TR
></TABLE
></BODY
></HTML
>