From f5b14fc6109e83730c4b13aaecf6f4314c0136a4 Mon Sep 17 00:00:00 2001 From: Artur Borecki Date: Tue, 3 Mar 2026 20:54:04 +0100 Subject: [PATCH] feat(backend_server.py): add timeout on HELLO --- src/judas_server/backend/backend_server.py | 13 +++++++++++++ 1 file changed, 13 insertions(+) diff --git a/src/judas_server/backend/backend_server.py b/src/judas_server/backend/backend_server.py index dfdbcf0..910a969 100644 --- a/src/judas_server/backend/backend_server.py +++ b/src/judas_server/backend/backend_server.py @@ -22,6 +22,7 @@ if TYPE_CHECKING: class BackendServer: ACK_TIMEOUT: Final[float] = 5.0 # seconds + HELLO_TIMEOUT: Final[float] = 3.0 # seconds def __init__(self, host: str = "0.0.0.0", port: int = 3692) -> None: """Initialize the backend server. @@ -58,6 +59,7 @@ class BackendServer: self._initialize_handlers() self.pending_acks: list[tuple[Client, Message, float]] = [] + self.pending_hello: dict[Client, float] = {} self.running: bool = False @@ -196,6 +198,8 @@ class BackendServer: events = selectors.EVENT_READ | selectors.EVENT_WRITE self.selector.register(conn, events, data=client) + self.pending_hello[client] = time.time() + self.logger.info(f"[+] Registered client {client}, HELLO pending...") def _disconnect(self, client: Client) -> None: @@ -365,6 +369,15 @@ class BackendServer: self.send(client, msg) self.pending_acks.remove((client, msg, timestamp)) + # check pending HELLOs + for client, timestamp in list(self.pending_hello.items()): + if time.time() - timestamp > self.HELLO_TIMEOUT: + self.logger.warning( + f"HELLO timeout for {client}, disconnecting..." + ) + self._disconnect(client) + del self.pending_hello[client] + time.sleep(0.001) # prevent 100% CPU usage except Exception as e: