fix(runtime): detect android bind errors as port conflicts

This commit is contained in:
Dark_Avery 2026-03-30 16:38:09 +03:00
parent 3552de7dbf
commit e511ff597b
2 changed files with 31 additions and 2 deletions

View File

@ -158,8 +158,9 @@ class ProxyAppRuntime:
loop.run_until_complete(self.run_proxy(stop_event=stop_ev))
except Exception as exc:
self.log.error("Proxy thread crashed: %s", exc)
if ("10048" in str(exc) or
"Address already in use" in str(exc)):
exc_text = str(exc)
if ("10048" in exc_text or
"address already in use" in exc_text.lower()):
self._emit_error(
"Не удалось запустить прокси:\n"
"Порт уже используется другим приложением.\n\n"

View File

@ -133,6 +133,34 @@ class ProxyAppRuntimeTests(unittest.TestCase):
self.assertEqual(errors, ["proxy boom"])
def test_run_proxy_thread_reports_port_in_use_case_insensitively(self):
with tempfile.TemporaryDirectory() as tmpdir:
errors = []
async def fake_run_proxy(stop_event=None):
raise RuntimeError(
"[Errno 98] error while attempting to bind on address "
"('127.0.0.1', 1443): address already in use"
)
runtime = ProxyAppRuntime(
Path(tmpdir),
on_error=errors.append,
run_proxy=fake_run_proxy,
)
runtime._run_proxy_thread(1443, {2: "149.154.167.220"}, "127.0.0.1")
self.assertEqual(
errors,
[
"Не удалось запустить прокси:\n"
"Порт уже используется другим приложением.\n\n"
"Закройте приложение, использующее этот порт, "
"или измените порт в настройках прокси и перезапустите."
],
)
if __name__ == "__main__":
unittest.main()