@@ -137,29 +137,41 @@ class ConnectionClosed(Exception):
137137
138138
139139class TCPTransport (FramedTransport ):
140- def __init__ (self , host , port , isServer ):
140+ def __init__ (self , host , port = None , isServer = False , isUnixSocket = False ):
141141 super (TCPTransport , self ).__init__ ()
142+ assert (port is not None and isUnixSocket is False ) or (
143+ port is None and isUnixSocket is True
144+ ), "port and isUnixSocket are mutually exclusive"
142145 self ._host = host
143146 self ._port = port
144147 self ._isServer = isServer
148+ self ._isUnixSocket = isUnixSocket
145149 self ._sock = None
146150
147151 if self ._isServer :
148152 self ._serverThread = threading .Thread (target = self ._serve )
149153 self ._serverThread .daemon = True
150154 self ._serverThread .start ()
151155 self ._serverSockEventStart = threading .Event ()
156+ elif self ._isUnixSocket :
157+ self ._sock = socket .socket (socket .AF_UNIX , socket .SOCK_STREAM )
158+ self ._sock .connect (self ._host )
152159 else :
153160 self ._sock = socket .socket (socket .AF_INET , socket .SOCK_STREAM )
154161 self ._sock .setsockopt (socket .SOL_TCP , socket .TCP_NODELAY , 1 )
155162 self ._sock .connect ((self ._host , self ._port ))
156163
157164 def _serve (self ):
158- s = socket .socket (socket .AF_INET , socket .SOCK_STREAM )
159- s .setblocking (1 )
160- s .setsockopt (socket .SOL_SOCKET , socket .SO_REUSEADDR , 1 )
161- s .setsockopt (socket .SOL_TCP , socket .TCP_NODELAY , 1 )
162- s .bind ((self ._host , self ._port ))
165+ if self ._isUnixSocket :
166+ s = socket .socket (socket .AF_UNIX , socket .SOCK_STREAM )
167+ s .setblocking (1 )
168+ s .bind (self ._host )
169+ else :
170+ s = socket .socket (socket .AF_INET , socket .SOCK_STREAM )
171+ s .setblocking (1 )
172+ s .setsockopt (socket .SOL_SOCKET , socket .SO_REUSEADDR , 1 )
173+ s .setsockopt (socket .SOL_TCP , socket .TCP_NODELAY , 1 )
174+ s .bind ((self ._host , self ._port ))
163175 s .listen (5 )
164176
165177 while True :
0 commit comments