def __init__(self, addr, requestHandler=SimpleJSONRPCRequestHandler,
logRequests=True, encoding=None, bind_and_activate=True,
address_family=socket.AF_INET,
config=jsonrpclib.config.DEFAULT):
"""
Sets up the server and the dispatcher
:param addr: The server listening address
:param requestHandler: Custom request handler
:param logRequests: Flag to(de)activate requests logging
:param encoding: The dispatcher request encoding
:param bind_and_activate: If True, starts the server immediately
:param address_family: The server listening address family
:param config: A JSONRPClib Config instance
"""
# Set up the dispatcher fields
SimpleJSONRPCDispatcher.__init__(self, encoding, config)
# Prepare the server configuration
# logRequests is used by SimpleXMLRPCRequestHandler
self.logRequests = logRequests
self.address_family = address_family
self.json_config = config
# Work on the request handler
class RequestHandlerWrapper(requestHandler, object):
"""
Wraps the request handle to have access to the configuration
"""
def __init__(self, *args, **kwargs):
"""
Constructs the wrapper after having stored the configuration
"""
self.config = config
super(RequestHandlerWrapper, self).__init__(*args, **kwargs)
# Set up the server
socketserver.TCPServer.__init__(self, addr, requestHandler,
bind_and_activate)
# Windows-specific
if fcntl is not None and hasattr(fcntl, 'FD_CLOEXEC'):
flags = fcntl.fcntl(self.fileno(), fcntl.F_GETFD)
flags |= fcntl.FD_CLOEXEC
fcntl.fcntl(self.fileno(), fcntl.F_SETFD, flags)
# ------------------------------------------------------------------------------
评论列表
文章目录