Что означает код errno 39 (EDESTADDRREQ)?

 
Также может означать:
КонстантаТипОС
ERROR_HANDLE_DISK_FULLОшибка WindowsWindows
KERN_LOCK_UNSTABLEКод возврата ядра macOSmacOS
ippStsEvenMedianWeightСтатус Intel IPPЛюбая
ENOTEMPTYerrnoLinux
EL3HLTerrnoSolaris
ENOLCKerrnoWindows
RDR_FILE_SYSTEMКод BSODWindows
Предыдущий Следующий
ENOTEMPTY EL3HLT

EDESTADDRREQ

Для отправки в стиле датаграмм не было доступно назначение

EDESTADDRREQ означает, что операции необходим адрес назначения, но он отсутствует. Сокет без установления соединения может получить назначение из адреса, переданного в sendto() или sendmsg(), либо из адреса другой стороны, ранее заданного через connect(); без одного из этих вариантов ядру некуда отправлять сообщение.

Это ошибка выбора адреса, а не DNS или маршрута. Приложение ещё не предоставило сетевому стеку достаточно сведений для начала маршрутизации. Поэтому код отличается от ENETUNREACH и EHOSTUNREACH, которые относятся к доступности после определения адреса.

Что проверить

  • Запишите использованный API: send() использует состояние другой стороны сокета, а sendto() и sendmsg() могут задавать назначение для каждого сообщения.
  • Для сокета датаграмм проверьте, намеренно ли код использует подключённый сокет в стиле UDP или ожидает, что каждая отправка будет содержать адрес.
  • Если ожидалось назначение, запишите полную длину и семейство sockaddr; в журналах приложения нулевой или неправильно сформированный адрес можно принять за пропущенный.

Связанные состояния

ENOTCONN относится к операции, требующей подключённой другой стороны. EISCONN может возникнуть, когда код передаёт назначение, хотя сокет с соединением уже подключён. Эти ошибки указывают на противоположные нарушения управления состоянием другой стороны.

Ссылки


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