fix(proxy-client): порт свободен сразу после остановки по Ctrl+C
Проверка порта перед запуском открывала сокет без SO_REUSEADDR и отказывала, пока на порту доживали закрытые соединения Xray (TIME_WAIT), хотя сам Xray запустился бы. Живой слушатель флаг на Linux не обходит, так что занятый порт по-прежнему обнаруживается. Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
This commit is contained in:
1 parent
b492f8f4eb
commit
205e995f26
2 files changed
+43
No files matched your search
@@ -1317,6 +1317,10 @@ def check_port_available(address, port):
|
||||
family = socket.AF_INET6 if address.version == 6 else socket.AF_INET
|
||||
try:
|
||||
with socket.socket(family, socket.SOCK_STREAM) as listener:
|
||||
# Без флага bind отказывает, пока после остановки Xray на порту
|
||||
# доживают закрытые соединения (TIME_WAIT); живой слушатель
|
||||
# на Linux флаг не обходит, и занятый порт по-прежнему виден.
|
||||
listener.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEADDR, 1)
|
||||
listener.bind((str(address), port))
|
||||
except OSError:
|
||||
raise ProxyError("локальный порт {} занят или недоступен".format(port))
|
||||
|
||||
Reference in new issue
Block a user