From af5dd7243ebcebd6a5ded6b5f4aea2467d770dbf Mon Sep 17 00:00:00 2001 From: Janis Date: Sat, 25 Nov 2023 01:27:07 +0100 Subject: [PATCH] Fix request handler restart issue --- app/requestHandler.py | 37 ++++++++++++++++++++++++++++--------- 1 file changed, 28 insertions(+), 9 deletions(-) diff --git a/app/requestHandler.py b/app/requestHandler.py index 33e862e..df7a3b2 100644 --- a/app/requestHandler.py +++ b/app/requestHandler.py @@ -10,11 +10,17 @@ class RequestHandler(threading.Thread): self.port = port self.docker_handler = docker_handler self.sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM) + self.sock.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEADDR, 1) server_address = ('localhost', self.port) print(f'Starting up on {server_address[0]} port {server_address[1]}') self.sock.bind(server_address) self.sock.listen(1) + def restart(self): + print(f'Restarting request handler for port {self.port}') + self.sock.close() + self.__init__(self.port, self.docker_handler) + def run(self): while True: try: @@ -23,12 +29,18 @@ class RequestHandler(threading.Thread): try: print('Connection from', self.client_address) self.handle_request() + except Exception as e: + print( + f'Error in request handler for port {self.port}: {e}') + print('Restarting request handler...') + self.restart() finally: self.connection.close() + self.restart() except Exception as e: print(f'Error in request handler for port {self.port}: {e}') print('Restarting request handler...') - self.__init__(self.port, self.docker_handler) + self.restart() def handle_request(self): print(f'Handling request on port {self.port}') @@ -38,7 +50,8 @@ class RequestHandler(threading.Thread): container_ip) isStarting = self.docker_handler.is_container_starting(container) request = self.connection.recv(1024) - if request[0] == 0x10: + print(f'Received request: {request}') + if request[0] == 0x10 or request[0] == 0x15: if b'\x01' in request: print(f'Detected ping request for {container_ip}') self.forward_request_to_placeholder(request, isStarting) @@ -56,9 +69,12 @@ class RequestHandler(threading.Thread): elif request[0] == 0xFE: print(f'Detected legacy ping request for {container_ip}') self.forward_request_to_placeholder(request, isStarting) - else: - print(f'No container mapped to port {self.port}') + print(f'Detected unknown request for {container_ip}') + self.forward_request_to_placeholder(request, isStarting) + + else: + print(f'No container mapped to port {self.port}') def forward_request_to_placeholder(self, request, isStarting=False): print('Forwarding request to placeholder server') @@ -71,8 +87,11 @@ class RequestHandler(threading.Thread): if not ip: print('No placeholder server IP found') return - server_socket.connect( - (ip, 25565)) - server_socket.sendall(request) - response = server_socket.recv(1024) - self.connection.sendall(response) + try: + server_socket.connect((ip, 25565)) + server_socket.sendall(request) + response = server_socket.recv(1024) + self.connection.sendall(response) + except Exception as e: + print(f'Error while handling request on port {self.port}: {e}') + self.restart()