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

 
Также может означать:
КонстантаТипОС
KERN_NOT_WAITINGКод возврата ядра macOSmacOS
ippStsSizeWrnСтатус Intel IPPЛюбая
ELNRNGerrnoLinux
ENOTSUPerrnoSolaris
SET_OF_INVALID_CONTEXTКод BSODWindows
Предыдущий Следующий
ELNRNG ENOTSUP

EADDRINUSE

Конфликты владения локальным адресом

EADDRINUSE означает, что локальный адрес, запрошенный операцией, уже используется. Ошибка может возникнуть при явном вызове bind(), но при установлении соединения системе также может потребоваться временный локальный адрес, и подходящая локальная комбинация адреса и порта может оказаться недоступной.

Ошибка ничего не говорит о том, работает ли удалённая служба. Это конфликт в локальном пространстве имён, учитывающий семейство адресов, локальный адрес, порт, протокол и иногда состояние соединения. Сообщение «порт занят» слишком общее и не объясняет такой конфликт полностью.

Какие данные собрать до изменения параметров

  • Запишите точные запрошенные локальный адрес и порт, семейство, тип сокета, протокол, а также вызывал ли процесс bind() явно.
  • Проверьте слушающие сокеты и недавно закрытые соединения, соответствующие нужной комбинации; не считайте, что другой процесс занимает тот же порт на всех локальных адресах.
  • Зафиксируйте все параметры повторного использования адреса сокета и порядок их установки до bind(). Их семантика зависит от платформы и протокола, поэтому они не являются универсальным исправлением.

Отличие от EADDRNOTAVAIL

EADDRINUSE означает, что адрес уже занят. EADDRNOTAVAIL означает, что запрошенный локальный адрес сейчас недоступен на этом компьютере. В первом случае имеется конфликт, во втором — недопустимый или отсутствующий локальный адрес.

Ссылки


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