@@ -137,29 +137,41 @@ class ConnectionClosed(Exception):
137
137
138
138
139
139
class TCPTransport (FramedTransport ):
140
- def __init__ (self , host , port , isServer ):
140
+ def __init__ (self , host , port = None , isServer = False , isUnixSocket = False ):
141
141
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"
142
145
self ._host = host
143
146
self ._port = port
144
147
self ._isServer = isServer
148
+ self ._isUnixSocket = isUnixSocket
145
149
self ._sock = None
146
150
147
151
if self ._isServer :
148
152
self ._serverThread = threading .Thread (target = self ._serve )
149
153
self ._serverThread .daemon = True
150
154
self ._serverThread .start ()
151
155
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 )
152
159
else :
153
160
self ._sock = socket .socket (socket .AF_INET , socket .SOCK_STREAM )
154
161
self ._sock .setsockopt (socket .SOL_TCP , socket .TCP_NODELAY , 1 )
155
162
self ._sock .connect ((self ._host , self ._port ))
156
163
157
164
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 ))
163
175
s .listen (5 )
164
176
165
177
while True :
0 commit comments