fix: gracefully handle port-in-use error on server startup

Catch EADDRINUSE OSError when binding the TCP site and exit with a
clear error message instead of an unhandled traceback.

Amp-Thread-ID: https://ampcode.com/threads/T-019cf85a-650a-73fa-8201-1dbddcbbd9e4
Co-authored-by: Amp <amp@ampcode.com>
This commit is contained in:
Luke Mino-Altherr 2026-03-16 16:34:35 -04:00
parent b202f842af
commit 425ed43cc6

View File

@ -1,3 +1,4 @@
import errno
import os
import sys
import asyncio
@ -1236,7 +1237,13 @@ class PromptServer():
address = addr[0]
port = addr[1]
site = web.TCPSite(runner, address, port, ssl_context=ssl_ctx)
await site.start()
try:
await site.start()
except OSError as e:
if e.errno == errno.EADDRINUSE:
logging.error(f"Port {port} is already in use on address {address}. Please close the other application or use a different port with --port.")
raise SystemExit(1)
raise
if not hasattr(self, 'address'):
self.address = address #TODO: remove this