\section{\module{SocketServer} ---
         A framework for network servers}

\declaremodule{standard}{SocketServer}
\modulesynopsis{A framework for network servers.}


The \module{SocketServer} module simplifies the task of writing network
servers.

There are four basic server classes: \class{TCPServer} uses the
Internet TCP protocol, which provides for continuous streams of data
between the client and server.  \class{UDPServer} uses datagrams, which
are discrete packets of information that may arrive out of order or be
lost while in transit.  The more infrequently used
\class{UnixStreamServer} and \class{UnixDatagramServer} classes are
similar, but use \UNIX{} domain sockets; they're not available on
non-\UNIX{} platforms.  For more details on network programming, consult
a book such as W. Richard Steven's \citetitle{UNIX Network Programming}
or Ralph Davis's \citetitle{Win32 Network Programming}.

These four classes process requests \dfn{synchronously}; each request
must be completed before the next request can be started.  This isn't
suitable if each request takes a long time to complete, because it
requires a lot of computation, or because it returns a lot of data
which the client is slow to process.  The solution is to create a
separate process or thread to handle each request; the
\class{ForkingMixIn} and \class{ThreadingMixIn} mix-in classes can be
used to support asynchronous behaviour.

Creating a server requires several steps.  First, you must create a
request handler class by subclassing the \class{BaseRequestHandler}
class and overriding its \method{handle()} method; this method will
process incoming requests.  Second, you must instantiate one of the
server classes, passing it the server's address and the request
handler class.  Finally, call the \method{handle_request()} or
\method{serve_forever()} method of the server object to process one or
many requests.

When inheriting from \class{ThreadingMixIn} for threaded connection
behavior, you should explicitly declare how you want your threads
to behave on an abrupt shutdown. The \class{ThreadingMixIn} class
defines an attribute \var{daemon_threads}, which indicates whether
or not the server should wait for thread termination. You should
set the flag explicitly if you would like threads to behave
autonomously; the default is \constant{False}, meaning that Python
will not exit until all threads created by \class{ThreadingMixIn} have
exited.

Server classes have the same external methods and attributes, no
matter what network protocol they use:

\setindexsubitem{(SocketServer protocol)}

\subsection{Server Creation Notes}

There are five classes in an inheritance diagram, four of which represent
synchronous servers of four types:

\begin{verbatim}
        +------------+
        | BaseServer |
        +------------+
              |
              v
        +-----------+        +------------------+
        | TCPServer |------->| UnixStreamServer |
        +-----------+        +------------------+
              |
              v
        +-----------+        +--------------------+
        | UDPServer |------->| UnixDatagramServer |
        +-----------+        +--------------------+
\end{verbatim}

Note that \class{UnixDatagramServer} derives from \class{UDPServer}, not
from \class{UnixStreamServer} -- the only difference between an IP and a
Unix stream server is the address family, which is simply repeated in both
unix server classes.

Forking and threading versions of each type of server can be created using
the \class{ForkingMixIn} and \class{ThreadingMixIn} mix-in classes.  For
instance, a threading UDP server class is created as follows:

\begin{verbatim}
    class ThreadingUDPServer(ThreadingMixIn, UDPServer): pass
\end{verbatim}

The mix-in class must come first, since it overrides a method defined in
\class{UDPServer}.  Setting the various member variables also changes the
behavior of the underlying server mechanism.

To implement a service, you must derive a class from
\class{BaseRequestHandler} and redefine its \method{handle()} method.  You
can then run various versions of the service by combining one of the server
classes with your request handler class.  The request handler class must be
different for datagram or stream services.  This can be hidden by using the
handler subclasses \class{StreamRequestHandler} or \class{DatagramRequestHandler}.

Of course, you still have to use your head!  For instance, it makes no sense
to use a forking server if the service contains state in memory that can be
modified by different requests, since the modifications in the child process
would never reach the initial state kept in the parent process and passed to
each child.  In this case, you can use a threading server, but you will
probably have to use locks to protect the integrity of the shared data.

On the other hand, if you are building an HTTP server where all data is
stored externally (for instance, in the file system), a synchronous class
will essentially render the service "deaf" while one request is being
handled -- which may be for a very long time if a client is slow to receive
all the data it has requested.  Here a threading or forking server is
appropriate.

In some cases, it may be appropriate to process part of a request
synchronously, but to finish processing in a forked child depending on the
request data.  This can be implemented by using a synchronous server and
doing an explicit fork in the request handler class \method{handle()}
method.

Another approach to handling multiple simultaneous requests in an
environment that supports neither threads nor \function{fork()} (or where
these are too expensive or inappropriate for the service) is to maintain an
explicit table of partially finished requests and to use \function{select()}
to decide which request to work on next (or whether to handle a new incoming
request).  This is particularly important for stream services where each
client can potentially be connected for a long time (if threads or
subprocesses cannot be used).

%XXX should data and methods be intermingled, or separate?
% how should the distinction between class and instance variables be
% drawn?

\subsection{Server Objects}

\begin{funcdesc}{fileno}{}
Return an integer file descriptor for the socket on which the server
is listening.  This function is most commonly passed to
\function{select.select()}, to allow monitoring multiple servers in the
same process.
\end{funcdesc}

\begin{funcdesc}{handle_request}{}
Process a single request.  This function calls the following methods
in order: \method{get_request()}, \method{verify_request()}, and
\method{process_request()}.  If the user-provided \method{handle()}
method of the handler class raises an exception, the server's
\method{handle_error()} method will be called.
\end{funcdesc}

\begin{funcdesc}{serve_forever}{}
Handle an infinite number of requests.  This simply calls
\method{handle_request()} inside an infinite loop.
\end{funcdesc}

\begin{datadesc}{address_family}
The family of protocols to which the server's socket belongs.
\constant{socket.AF_INET} and \constant{socket.AF_UNIX} are two
possible values.
\end{datadesc}

\begin{datadesc}{RequestHandlerClass}
The user-provided request handler class; an instance of this class is
created for each request.
\end{datadesc}

\begin{datadesc}{server_address}
The address on which the server is listening.  The format of addresses
varies depending on the protocol family; see the documentation for the
socket module for details.  For Internet protocols, this is a tuple
containing a string giving the address, and an integer port number:
\code{('127.0.0.1', 80)}, for example.
\end{datadesc}

\begin{datadesc}{socket}
The socket object on which the server will listen for incoming requests.
\end{datadesc}

% XXX should class variables be covered before instance variables, or
% vice versa?

The server classes support the following class variables:

\begin{datadesc}{allow_reuse_address}
Whether the server will allow the reuse of an address. This defaults
to \constant{False}, and can be set in subclasses to change the policy.
\end{datadesc}

\begin{datadesc}{request_queue_size}
The size of the request queue.  If it takes a long time to process a
single request, any requests that arrive while the server is busy are
placed into a queue, up to \member{request_queue_size} requests.  Once
the queue is full, further requests from clients will get a
``Connection denied'' error.  The default value is usually 5, but this
can be overridden by subclasses.
\end{datadesc}

\begin{datadesc}{socket_type}
The type of socket used by the server; \constant{socket.SOCK_STREAM}
and \constant{socket.SOCK_DGRAM} are two possible values.
\end{datadesc}

There are various server methods that can be overridden by subclasses
of base server classes like \class{TCPServer}; these methods aren't
useful to external users of the server object.

% should the default implementations of these be documented, or should
% it be assumed that the user will look at SocketServer.py?

\begin{funcdesc}{finish_request}{}
Actually processes the request by instantiating
\member{RequestHandlerClass} and calling its \method{handle()} method.
\end{funcdesc}

\begin{funcdesc}{get_request}{}
Must accept a request from the socket, and return a 2-tuple containing
the \emph{new} socket object to be used to communicate with the
client, and the client's address.
\end{funcdesc}

\begin{funcdesc}{handle_error}{request, client_address}
This function is called if the \member{RequestHandlerClass}'s
\method{handle()} method raises an exception.  The default action is
to print the traceback to standard output and continue handling
further requests.
\end{funcdesc}

\begin{funcdesc}{process_request}{request, client_address}
Calls \method{finish_request()} to create an instance of the
\member{RequestHandlerClass}.  If desired, this function can create a
new process or thread to handle the request; the \class{ForkingMixIn}
and \class{ThreadingMixIn} classes do this.
\end{funcdesc}

% Is there any point in documenting the following two functions?
% What would the purpose of overriding them be: initializing server
% instance variables, adding new network families?

\begin{funcdesc}{server_activate}{}
Called by the server's constructor to activate the server.  The default
behavior just \method{listen}s to the server's socket.
May be overridden.
\end{funcdesc}

\begin{funcdesc}{server_bind}{}
Called by the server's constructor to bind the socket to the desired
address.  May be overridden.
\end{funcdesc}

\begin{funcdesc}{verify_request}{request, client_address}
Must return a Boolean value; if the value is \constant{True}, the request will be
processed, and if it's \constant{False}, the request will be denied.
This function can be overridden to implement access controls for a server.
The default implementation always returns \constant{True}.
\end{funcdesc}

\subsection{RequestHandler Objects}

The request handler class must define a new \method{handle()} method,
and can override any of the following methods.  A new instance is
created for each request.

\begin{funcdesc}{finish}{}
Called after the \method{handle()} method to perform any clean-up
actions required.  The default implementation does nothing.  If
\method{setup()} or \method{handle()} raise an exception, this
function will not be called.
\end{funcdesc}

\begin{funcdesc}{handle}{}
This function must do all the work required to service a request.
The default implementation does nothing.
Several instance attributes are available to it; the request is
available as \member{self.request}; the client address as
\member{self.client_address}; and the server instance as
\member{self.server}, in case it needs access to per-server
information.

The type of \member{self.request} is different for datagram or stream
services.  For stream services, \member{self.request} is a socket
object; for datagram services, \member{self.request} is a string.
However, this can be hidden by using the  request handler subclasses
\class{StreamRequestHandler} or \class{DatagramRequestHandler}, which
override the \method{setup()} and \method{finish()} methods, and
provide \member{self.rfile} and \member{self.wfile} attributes.
\member{self.rfile} and \member{self.wfile} can be read or written,
respectively, to get the request data or return data to the client.
\end{funcdesc}

\begin{funcdesc}{setup}{}
Called before the \method{handle()} method to perform any
initialization actions required.  The default implementation does
nothing.
\end{funcdesc}
