-
1
-
2
-
3
-
4
-
5
-
6
-
7
-
8
-
9
-
10
-
11
-
12
-
13
-
14
-
15
-
16
-
17
-
18
-
19
-
20
-
21
-
22
-
23
-
24
-
25
-
26
-
27
-
28
-
29
-
30
-
31
-
32
-
33
-
34
-
35
-
36
-
37
-
38
-
39
-
40
-
41
-
42
-
43
-
44
-
45
-
46
-
47
-
48
-
49
-
50
-
51
# https://stackoverflow.com/questions/11729159/use-python-xmlrpclib-with-unix-domain-sockets
import socket
from http.client import HTTPConnection
from socketserver import UnixStreamServer
from xmlrpc.client import Transport
from xmlrpc.server import SimpleXMLRPCDispatcher, SimpleXMLRPCRequestHandler
# Client
class UnixStreamHTTPConnection(HTTPConnection):
def connect(self):
self.sock = socket.socket(socket.AF_UNIX, socket.SOCK_STREAM)
self.sock.connect(self.host)
class UnixStreamTransport(Transport, object):
def __init__(self, socket_path):
self.socket_path = socket_path
super().__init__()
def make_connection(self, host):
return UnixStreamHTTPConnection(self.socket_path)
# Server
class UnixStreamXMLRPCRequestHandler(SimpleXMLRPCRequestHandler):
disable_nagle_algorithm = False
def address_string(self):
return self.client_address
class UnixStreamXMLRPCServer(UnixStreamServer, SimpleXMLRPCDispatcher):
def __init__(
self,
addr,
log_requests=True,
allow_none=True,
encoding=None,
bind_and_activate=True,
use_builtin_types=True,
):
self.logRequests = log_requests
SimpleXMLRPCDispatcher.__init__(self, allow_none, encoding, use_builtin_types)
UnixStreamServer.__init__(
self,
addr,
UnixStreamXMLRPCRequestHandler,
bind_and_activate,
)