mirror of
https://github.com/oobabooga/text-generation-webui.git
synced 2026-04-07 07:33:47 +00:00
Fix "address already in use" on server restart (Linux/macOS)
This commit is contained in:
parent
422f42ca7f
commit
d78fc46114
2 changed files with 25 additions and 2 deletions
|
|
@ -591,9 +591,31 @@ def run_server():
|
|||
if shared.args.admin_key and shared.args.admin_key != shared.args.api_key:
|
||||
logger.info(f'OpenAI API admin key (for loading/unloading models):\n\n{shared.args.admin_key}\n')
|
||||
|
||||
# Start server
|
||||
# Use SO_REUSEADDR to avoid "address already in use" after restart
|
||||
logging.getLogger("uvicorn.error").propagate = False
|
||||
uvicorn.run(app, host=server_addrs, port=port, ssl_certfile=ssl_certfile, ssl_keyfile=ssl_keyfile, access_log=False)
|
||||
sockets = []
|
||||
try:
|
||||
for addr in server_addrs:
|
||||
family = socket.AF_INET6 if ':' in addr else socket.AF_INET
|
||||
sock = socket.socket(family, socket.SOCK_STREAM)
|
||||
sock.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEADDR, 1)
|
||||
if family == socket.AF_INET6:
|
||||
sock.setsockopt(socket.IPPROTO_IPV6, socket.IPV6_V6ONLY, 1)
|
||||
sock.bind((addr.strip('[]'), port))
|
||||
sock.listen(socket.SOMAXCONN)
|
||||
sockets.append(sock)
|
||||
except Exception:
|
||||
for s in sockets:
|
||||
s.close()
|
||||
raise
|
||||
|
||||
config = uvicorn.Config(app, ssl_certfile=ssl_certfile, ssl_keyfile=ssl_keyfile, access_log=False)
|
||||
server = uvicorn.Server(config)
|
||||
try:
|
||||
server.run(sockets=sockets)
|
||||
finally:
|
||||
for s in sockets:
|
||||
s.close()
|
||||
|
||||
|
||||
_server_started = False
|
||||
|
|
|
|||
|
|
@ -373,6 +373,7 @@ class LlamaServer:
|
|||
"""Check if a port is available for use."""
|
||||
with socket.socket(socket.AF_INET, socket.SOCK_STREAM) as s:
|
||||
try:
|
||||
s.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEADDR, 1)
|
||||
s.bind(('', port))
|
||||
return True
|
||||
except OSError:
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue