Files
h3cx 482c093f38 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
2026-08-03 17:17:33 +01:00

28 lines
847 B
Python

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])