Pyro socket server API contract.
For now, this is an internal API, used by the Pyro Daemon.
The various servers in Pyro4.socketserver implement this.


METHODS:

    def init(self, daemon, host, port):
        Must bind the server on the given host and port (can be None).
        daemon is the object that will receive Pyro invocation calls (see below).
        When host or port is None, the server can select something appropriate itself.
        If possible, use Pyro4.config.COMMTIMEOUT on the sockets.
        Set self.sock to the daemon server socket.

    def loop(self, loopCondition):
        Start an endless loop that serves Pyro requests.
        loopCondition is an optional function that is called every iteration,
        if it returns False, the loop is terminated and this method returns.

    def events(self, eventsockets):
        Called from external event loops: let the server handle events that occur on one of the sockets of this server.
        eventsockets is a sequence of all the sockets for which an event occurred.

    def close(self):
        Release the connections and close the server. It can no longer be used after calling this,
        until you call initServer again.

    def wakeup(self):
        This is called to wake up the requestLoop if it is in a blocking state.

PROPERTIES:

    sockets:
        must be the list of all sockets used by this server (server socket + all connected client sockets)

    sock:
        must be the server socket itself.

    locationStr:
        must be a string of the form "serverhostname:serverport"
        can be different from the host:port arguments passed to initServer.
        because either of those can be None and the server will choose something appropriate.
