diff options
Diffstat (limited to 'bitbake/lib/bb/asyncrpc/serv.py')
-rw-r--r-- | bitbake/lib/bb/asyncrpc/serv.py | 37 |
1 files changed, 28 insertions, 9 deletions
diff --git a/bitbake/lib/bb/asyncrpc/serv.py b/bitbake/lib/bb/asyncrpc/serv.py index a66117acad..667217c5c1 100644 --- a/bitbake/lib/bb/asyncrpc/serv.py +++ b/bitbake/lib/bb/asyncrpc/serv.py | |||
@@ -138,14 +138,20 @@ class StreamServer(object): | |||
138 | 138 | ||
139 | 139 | ||
140 | class TCPStreamServer(StreamServer): | 140 | class TCPStreamServer(StreamServer): |
141 | def __init__(self, host, port, handler, logger): | 141 | def __init__(self, host, port, handler, logger, *, reuseport=False): |
142 | super().__init__(handler, logger) | 142 | super().__init__(handler, logger) |
143 | self.host = host | 143 | self.host = host |
144 | self.port = port | 144 | self.port = port |
145 | self.reuseport = reuseport | ||
145 | 146 | ||
146 | def start(self, loop): | 147 | def start(self, loop): |
147 | self.server = loop.run_until_complete( | 148 | self.server = loop.run_until_complete( |
148 | asyncio.start_server(self.handle_stream_client, self.host, self.port) | 149 | asyncio.start_server( |
150 | self.handle_stream_client, | ||
151 | self.host, | ||
152 | self.port, | ||
153 | reuse_port=self.reuseport, | ||
154 | ) | ||
149 | ) | 155 | ) |
150 | 156 | ||
151 | for s in self.server.sockets: | 157 | for s in self.server.sockets: |
@@ -209,11 +215,12 @@ class UnixStreamServer(StreamServer): | |||
209 | 215 | ||
210 | 216 | ||
211 | class WebsocketsServer(object): | 217 | class WebsocketsServer(object): |
212 | def __init__(self, host, port, handler, logger): | 218 | def __init__(self, host, port, handler, logger, *, reuseport=False): |
213 | self.host = host | 219 | self.host = host |
214 | self.port = port | 220 | self.port = port |
215 | self.handler = handler | 221 | self.handler = handler |
216 | self.logger = logger | 222 | self.logger = logger |
223 | self.reuseport = reuseport | ||
217 | 224 | ||
218 | def start(self, loop): | 225 | def start(self, loop): |
219 | import websockets.server | 226 | import websockets.server |
@@ -224,6 +231,7 @@ class WebsocketsServer(object): | |||
224 | self.host, | 231 | self.host, |
225 | self.port, | 232 | self.port, |
226 | ping_interval=None, | 233 | ping_interval=None, |
234 | reuse_port=self.reuseport, | ||
227 | ) | 235 | ) |
228 | ) | 236 | ) |
229 | 237 | ||
@@ -262,14 +270,26 @@ class AsyncServer(object): | |||
262 | self.loop = None | 270 | self.loop = None |
263 | self.run_tasks = [] | 271 | self.run_tasks = [] |
264 | 272 | ||
265 | def start_tcp_server(self, host, port): | 273 | def start_tcp_server(self, host, port, *, reuseport=False): |
266 | self.server = TCPStreamServer(host, port, self._client_handler, self.logger) | 274 | self.server = TCPStreamServer( |
275 | host, | ||
276 | port, | ||
277 | self._client_handler, | ||
278 | self.logger, | ||
279 | reuseport=reuseport, | ||
280 | ) | ||
267 | 281 | ||
268 | def start_unix_server(self, path): | 282 | def start_unix_server(self, path): |
269 | self.server = UnixStreamServer(path, self._client_handler, self.logger) | 283 | self.server = UnixStreamServer(path, self._client_handler, self.logger) |
270 | 284 | ||
271 | def start_websocket_server(self, host, port): | 285 | def start_websocket_server(self, host, port, reuseport=False): |
272 | self.server = WebsocketsServer(host, port, self._client_handler, self.logger) | 286 | self.server = WebsocketsServer( |
287 | host, | ||
288 | port, | ||
289 | self._client_handler, | ||
290 | self.logger, | ||
291 | reuseport=reuseport, | ||
292 | ) | ||
273 | 293 | ||
274 | async def _client_handler(self, socket): | 294 | async def _client_handler(self, socket): |
275 | address = socket.address | 295 | address = socket.address |
@@ -368,8 +388,7 @@ class AsyncServer(object): | |||
368 | 388 | ||
369 | self._serve_forever(tasks) | 389 | self._serve_forever(tasks) |
370 | 390 | ||
371 | if sys.version_info >= (3, 6): | 391 | self.loop.run_until_complete(self.loop.shutdown_asyncgens()) |
372 | self.loop.run_until_complete(self.loop.shutdown_asyncgens()) | ||
373 | self.loop.close() | 392 | self.loop.close() |
374 | 393 | ||
375 | queue = multiprocessing.Queue() | 394 | queue = multiprocessing.Queue() |