The fail-fast port check bound a plain socket, so TIME_WAIT sockets left
by a just-stopped instance (~60s) made it report 'port already in use'
even though uvicorn (which sets SO_REUSEADDR) could bind fine. Mirror
uvicorn's bind semantics: the check now only fails when the port is
genuinely held by a live listener.