feat(backend_server.py): add timeout on HELLO

This commit is contained in:
2026-03-03 20:54:04 +01:00
parent bf1ad0ead0
commit f5b14fc610

View File

@@ -22,6 +22,7 @@ if TYPE_CHECKING:
class BackendServer: class BackendServer:
ACK_TIMEOUT: Final[float] = 5.0 # seconds 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: def __init__(self, host: str = "0.0.0.0", port: int = 3692) -> None:
"""Initialize the backend server. """Initialize the backend server.
@@ -58,6 +59,7 @@ class BackendServer:
self._initialize_handlers() self._initialize_handlers()
self.pending_acks: list[tuple[Client, Message, float]] = [] self.pending_acks: list[tuple[Client, Message, float]] = []
self.pending_hello: dict[Client, float] = {}
self.running: bool = False self.running: bool = False
@@ -196,6 +198,8 @@ class BackendServer:
events = selectors.EVENT_READ | selectors.EVENT_WRITE events = selectors.EVENT_READ | selectors.EVENT_WRITE
self.selector.register(conn, events, data=client) self.selector.register(conn, events, data=client)
self.pending_hello[client] = time.time()
self.logger.info(f"[+] Registered client {client}, HELLO pending...") self.logger.info(f"[+] Registered client {client}, HELLO pending...")
def _disconnect(self, client: Client) -> None: def _disconnect(self, client: Client) -> None:
@@ -365,6 +369,15 @@ class BackendServer:
self.send(client, msg) self.send(client, msg)
self.pending_acks.remove((client, msg, timestamp)) 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 time.sleep(0.001) # prevent 100% CPU usage
except Exception as e: except Exception as e: