Что означает код errno 98 (EADDRINUSE)?

 
Также может означать:
КонстантаТипОС
ENOSRerrnomacOS
EPROTOTYPEerrnoSolaris
OBJECT1_INITIALIZATION_FAILEDКод BSODWindows
Предыдущий Следующий
EMSGSIZE ENOSR

EADDRINUSE

Что означает EADDRINUSE в Linux

EADDRINUSE: Адрес уже используется. Сначала определите, какой процесс или предыдущий socket state уже удерживает локальную комбинацию адреса и порта; это отличается от недоступности самого адреса.

В Linux связывайте errno с конкретным системным socket-вызовом и network namespace; одинаковое число без имени вызова и endpoint context недостаточно для диагностики. Полезные технические маркеры из контекста этой ошибки: EADDRINUSE, bind(), SO_REUSEADDR, TCP, IPv4, IPv6, POSIX. Записывайте их фактические значения или режимы, а не только символическое имя errno.

Диагностика

  • Проверьте маршрут и интерфейс отдельно от состояния удалённого сервиса: эти причины дают разные классы сетевых ошибок.
  • Зафиксируйте фазу socket lifecycle: создание, bind, connect, send, receive или shutdown; одинаковый endpoint проверяется по-разному на каждой фазе.
  • Сохраните local и remote address, family, socket type, protocol, blocking mode и состояние интерфейса до закрытия объекта.
  • Для Linux сопоставьте событие с process/thread, descriptor и точным syscall; после retry проверьте, не изменился ли объект под тем же числовым дескриптором.

Практическая проверка

Для проверки создайте минимальный bind на тот же адрес и порт и одновременно снимите список listeners и активных соединений. Если порт освобождается только после завершения предыдущего процесса или истечения transport state, проблема относится к ownership/lifecycle endpoint. Если занятость сохраняется без ожидаемого владельца, исследуйте namespace, wildcard binding и правила повторного использования адреса.

Ссылки


Нужно найти другой код? Найти другой код состояния или ошибки.