fix: set SO_REUSEADDR on port pre-check so restarts don't wait for TIME_WAIT #16

Merged
Pakobbix merged 1 commits from fix/reuseaddr-port-check into main 2026-10-03 19:18:59 +00:00
Showing only changes of commit 5cfadb4d9b - Show all commits
+4
View File
@@ -2610,7 +2610,11 @@ def run(
# Fail fast if the port is already in use — silently shifting ports breaks # Fail fast if the port is already in use — silently shifting ports breaks
# client discovery. Users should configure a different port explicitly. # client discovery. Users should configure a different port explicitly.
# SO_REUSEADDR mirrors uvicorn's own bind: without it, TIME_WAIT sockets
# left by a just-stopped instance (~60s) would fail this check even though
# uvicorn could bind fine, forcing a wait on every restart.
with socket.socket(socket.AF_INET, socket.SOCK_STREAM) as s: with socket.socket(socket.AF_INET, socket.SOCK_STREAM) as s:
s.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEADDR, 1)
try: try:
s.bind((host, port)) s.bind((host, port))
except OSError: except OSError: