Server isolation and detailed errors

Isolated the JsonServer to server.py inside protocols/json

Added specific errors for server startup timeout and server startup
failed

Refactored errors for Core to CoreError generic and refactored
StateError to CoreStateMismatchError derived from CoreError
This commit is contained in:
2026-08-03 17:17:33 +01:00
parent 321ccb178e
commit 482c093f38
11 changed files with 418 additions and 65 deletions
+27
View File
@@ -0,0 +1,27 @@
import socket
def find_available_port(
preferred_port: int | None = None,
host: str = "127.0.0.1",
) -> int:
"""Return an available TCP port on the given host.
The preferred port is returned when available. Otherwise, the operating
system selects an available ephemeral port.
"""
if preferred_port is not None:
if not 1 <= preferred_port <= 65535:
raise ValueError("preferred_port must be between 1 and 65535")
with socket.socket(socket.AF_INET, socket.SOCK_STREAM) as sock:
try:
sock.bind((host, preferred_port))
except OSError:
pass
else:
return preferred_port
with socket.socket(socket.AF_INET, socket.SOCK_STREAM) as sock:
sock.bind((host, 0))
return int(sock.getsockname()[1])