Skip to content

fix: диагностика ошибок прав доступа и некорректного адреса при запуске#924

Open
f4rceful wants to merge 1 commit into
Flowseal:mainfrom
f4rceful:fix/listen-error-diagnostics
Open

fix: диагностика ошибок прав доступа и некорректного адреса при запуске#924
f4rceful wants to merge 1 commit into
Flowseal:mainfrom
f4rceful:fix/listen-error-diagnostics

Conversation

@f4rceful

Copy link
Copy Markdown
Contributor

Что сделано

  • Добавлен независимый от зависимостей классификатор diagnose_listen_error() в utils/diagnostics.py, который сопоставляет OSError привязки сокета с понятными пользователю сообщениями: порт занят, доступ запрещён или некорректный/недоступный адрес.
  • Классификатор подключён к обоим обработчикам падений при запуске — utils/tray_common.py (трей Windows/Linux) и macos.py (macOS), — поэтому ошибки помимо «порт занят» теперь показывают подсказку, а не приводят к молчаливому падению.

Зачем

Раньше обработчики падений распознавали только «порт уже используется». Другие частые ошибки привязки оставались без диагностики:

Классификатор покрывает POSIX-коды errno и WinSock-коды Windows (10013/10014/10048/10049) и возвращает None для несвязанных ошибок, чтобы вызывающий код сохранял прежнюю общую обработку.

Как проверить

  • py_compile для utils/diagnostics.py, utils/tray_common.py, macos.py — без ошибок.
  • Занять порт 1443 другим процессом и запустить прокси в трее — вместо молчаливого падения появится подсказка «порт занят».
  • Локально проверено юнит-тестами: EADDRINUSE -> порт занят, WSAEADDRINUSE -> порт занят, EACCES -> доступ запрещён ([Проблема] ERROR tg-ws-tray Proxy thread crashed: [Errno 13] error while attempting to bind on address #878), WSAEFAULT -> некорректный адрес ([Проблема] WinError 10014 #903), EADDRNOTAVAIL -> некорректный адрес, не-OSError -> None, несвязанный OSError (ENOENT) -> None.

Startup crash handlers guided users only on "port already in use",
leaving permission-denied (Flowseal#878, Errno 13 / WSAEACCES) and
invalid-address (Flowseal#903, WinError 10014) bind failures with no actionable
message. Add a dependency-free diagnose_listen_error() classifier that
maps bind OSErrors to user-facing guidance (port busy / permission /
bad address), and wire it into the Windows/Linux tray and macOS crash
handlers (which previously also disagreed on which errors to catch).
@f4rceful f4rceful requested a review from Flowseal as a code owner May 31, 2026 18:56
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant