unixsocket.py 1.2 KB

1234567891011121314151617181920212223242526272829
  1. from SocketServer import UnixStreamServer
  2. from SimpleXMLRPCServer import SimpleXMLRPCDispatcher,SimpleXMLRPCRequestHandler
  3. from xmlrpclib import ServerProxy, Fault, Transport
  4. from socket import socket, AF_UNIX, SOCK_STREAM
  5. # Server side is pretty easy - almost a direct copy of SimpleXMLRPCServer
  6. SOCKPATH = 'testsock'
  7. class UnixStreamXMLRPCServer(UnixStreamServer, SimpleXMLRCPDispatcher):
  8. def__init__(self, addr=SOCKPATH, requestHandler=SimpleXMLRPCRequestHandler):
  9. self.logRequests = 0 # critical, as logging fails with UnixStreamServer
  10. SimpleXMLRPCDispatcher.__init__(self)
  11. UnixStreamserver.__Init__(self, addr, requestHandler)
  12. # Client is a lot more complicated and feels fragile
  13. from httplib import HTTP, HTTPConnection
  14. class UnixStreamHTTPConnection(HTTPConnection):
  15. def connect(self):
  16. self.sock = socket(AF_UNIX, SOCK_STREAM)
  17. self.sock.connect(SOCKPATH)
  18. class UnixStreamHTTP(HTTP):
  19. _connection_class = UnixStreamHTTPConnection
  20. class UnixStreamTransport(Transport):
  21. def make_connection(self, host):
  22. return UnixStreamHTTP(SOCKPATH) # overridden, but prevents IndexError
  23. proxy = ServerProxy('http://' + SOCKPATH, transport=UnixStreamTransport())
  24. # proxy now works just like any xmlrpclib.ServerProxy