Wait for port if address in use.
authorBenjamin Braatz <benjamin.braatz@graph-it.com>
Tue, 27 Jul 2021 06:16:48 +0000 (08:16 +0200)
committerBenjamin Braatz <benjamin.braatz@graph-it.com>
Tue, 27 Jul 2021 06:16:48 +0000 (08:16 +0200)
controlpi_plugins/wsserver.py

index 0114f8c25ff644b95dd62e6a0d604cf980f4bfa6..a3706dbc0ee7671b0add1fdb87f0d7aaad5a83bf 100644 (file)
@@ -6,9 +6,10 @@ TODO: documentation, doctests
 TODO: Let Debug web app collapse/expand nested structures
 TODO: Make Debug web app work with nested structures in commands
 """
+import asyncio
+import json
 import os
 import sys
-import json
 from websockets import WebSocketServerProtocol, ConnectionClosed, serve
 from websockets.http import Headers
 from http import HTTPStatus
@@ -202,6 +203,12 @@ class WSServer(BasePlugin):
 
     async def run(self) -> None:
         """Set up websocket server."""
-        await serve(self._handler, host=self._host, port=self._port,
-                    process_request=self._process_request)
+        serving = False
+        while not serving:
+            try:
+                await serve(self._handler, host=self._host, port=self._port,
+                            process_request=self._process_request)
+                serving = True
+            except OSError:
+                await asyncio.sleep(1)
         print(f"WSServer '{self.name}' serving on port {self._port}.")