| Предыдущий | Следующий |
| ENOTEMPTY | EL3HLT |
EDESTADDRREQ
Для отправки в стиле датаграмм не было доступно назначение
EDESTADDRREQ означает, что операции необходим адрес назначения, но он отсутствует. Сокет без установления соединения может получить назначение из адреса, переданного в sendto() или sendmsg(), либо из адреса другой стороны, ранее заданного через connect(); без одного из этих вариантов ядру некуда отправлять сообщение.
Это ошибка выбора адреса, а не DNS или маршрута. Приложение ещё не предоставило сетевому стеку достаточно сведений для начала маршрутизации. Поэтому код отличается от ENETUNREACH и EHOSTUNREACH, которые относятся к доступности после определения адреса.
Что проверить
- Запишите использованный API:
send()использует состояние другой стороны сокета, аsendto()иsendmsg()могут задавать назначение для каждого сообщения. - Для сокета датаграмм проверьте, намеренно ли код использует подключённый сокет в стиле UDP или ожидает, что каждая отправка будет содержать адрес.
- Если ожидалось назначение, запишите полную длину и семейство
sockaddr; в журналах приложения нулевой или неправильно сформированный адрес можно принять за пропущенный.
Связанные состояния
ENOTCONN относится к операции, требующей подключённой другой стороны. EISCONN может возникнуть, когда код передаёт назначение, хотя сокет с соединением уже подключён. Эти ошибки указывают на противоположные нарушения управления состоянием другой стороны.
Ссылки
Нужно найти другой код? Найти другой код состояния или ошибки.