diff --git a/src-python/controller.py b/src-python/controller.py index e21e66e0..c2db0f45 100644 --- a/src-python/controller.py +++ b/src-python/controller.py @@ -1831,10 +1831,12 @@ class Controller: } } else: - if model.checkWebSocketServerAlive() is True: + if model.checkWebSocketServerAlive() is False: + config.WEBSOCKET_HOST = data + response = {"status":200, "result":config.WEBSOCKET_HOST} + else: model.stopWebSocketServer() - - if model.checkWebSocketServerPortAvailable() is True: + if model.checkWebSocketServerAvailable() is True: model.startWebSocketServer(data, config.WEBSOCKET_PORT) config.WEBSOCKET_HOST = data response = {"status":200, "result":config.WEBSOCKET_HOST} @@ -1846,6 +1848,7 @@ class Controller: "data": config.WEBSOCKET_HOST } } + return response @staticmethod @@ -1854,9 +1857,12 @@ class Controller: @staticmethod def setWebSocketPort(data, *args, **kwargs) -> dict: - if model.checkWebSocketServerAlive() is True: + if model.checkWebSocketServerAlive() is False: + config.WEBSOCKET_PORT = int(data) + response = {"status":200, "result":config.WEBSOCKET_PORT} + else: model.stopWebSocketServer() - if model.checkWebSocketServerPortAvailable() is True: + if model.checkWebSocketServerAvailable() is True: model.startWebSocketServer(config.WEBSOCKET_HOST, int(data)) config.WEBSOCKET_PORT = int(data) response = {"status":200, "result":config.WEBSOCKET_PORT} @@ -1876,7 +1882,7 @@ class Controller: @staticmethod def setEnableWebSocketServer(*args, **kwargs) -> dict: - if model.checkWebSocketServerPortAvailable() is True: + if model.checkWebSocketServerAvailable() is True: model.startWebSocketServer(config.WEBSOCKET_HOST, config.WEBSOCKET_PORT) config.WEBSOCKET_SERVER = True response = {"status":200, "result":config.WEBSOCKET_SERVER} @@ -1997,7 +2003,7 @@ class Controller: printLog("Init WebSocket Server") if config.WEBSOCKET_SERVER is True: - if model.checkWebSocketServerPortAvailable() is True: + if model.checkWebSocketServerAvailable() is True: model.startWebSocketServer(config.WEBSOCKET_HOST, config.WEBSOCKET_PORT) else: config.WEBSOCKET_SERVER = False diff --git a/src-python/model.py b/src-python/model.py index 60800750..d52d6341 100644 --- a/src-python/model.py +++ b/src-python/model.py @@ -840,20 +840,27 @@ class Model: """WebSocketメッセージ受信時の処理""" pass - def checkWebSocketServerPortAvailable(self): + def checkWebSocketServerAvailable(self): """WebSocketサーバーのポートが使用中かどうかを確認する""" response = True - with socket.socket(socket.AF_INET, socket.SOCK_STREAM) as chk: - try: - chk.bind((config.WEBSOCKET_HOST, config.WEBSOCKET_PORT)) - chk.shutdown(socket.SHUT_RDWR) - chk.close() - except OSError as e: - if e.errno == errno.EADDRINUSE: - response = False - else: - errorLogging() - response = False + try: + with socket.socket(socket.AF_INET, socket.SOCK_STREAM) as chk: + # SO_REUSEADDRを設定してソケットの再利用を許可 + chk.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEADDR, 1) + try: + chk.bind((config.WEBSOCKET_HOST, config.WEBSOCKET_PORT)) + # シャットダウン前にリッスン状態にする必要はない + chk.close() + except OSError as e: + if e.errno == errno.EADDRINUSE: + response = False + else: + errorLogging() + response = False + except Exception: + errorLogging() + response = False + return response def startWebSocketServer(self, host, port):