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:
ddadminandClaude Opus 5.5 committed 2026-09-28 08:51:34 -04:00
1 parent b492f8f4eb
commit 205e995f26
2 files changed
+43

No files matched your search

+4
View File
@@ -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))