| Предыдущий | Следующий |
| ELNRNG | ENOTSUP |
EADDRINUSE
Конфликты владения локальным адресом
EADDRINUSE означает, что локальный адрес, запрошенный операцией, уже используется. Ошибка может возникнуть при явном вызове bind(), но при установлении соединения системе также может потребоваться временный локальный адрес, и подходящая локальная комбинация адреса и порта может оказаться недоступной.
Ошибка ничего не говорит о том, работает ли удалённая служба. Это конфликт в локальном пространстве имён, учитывающий семейство адресов, локальный адрес, порт, протокол и иногда состояние соединения. Сообщение «порт занят» слишком общее и не объясняет такой конфликт полностью.
Какие данные собрать до изменения параметров
- Запишите точные запрошенные локальный адрес и порт, семейство, тип сокета, протокол, а также вызывал ли процесс
bind()явно. - Проверьте слушающие сокеты и недавно закрытые соединения, соответствующие нужной комбинации; не считайте, что другой процесс занимает тот же порт на всех локальных адресах.
- Зафиксируйте все параметры повторного использования адреса сокета и порядок их установки до
bind(). Их семантика зависит от платформы и протокола, поэтому они не являются универсальным исправлением.
Отличие от EADDRNOTAVAIL
EADDRINUSE означает, что адрес уже занят. EADDRNOTAVAIL означает, что запрошенный локальный адрес сейчас недоступен на этом компьютере. В первом случае имеется конфликт, во втором — недопустимый или отсутствующий локальный адрес.
Ссылки
Нужно найти другой код? Найти другой код состояния или ошибки.