Что означает код errno 96 (ENODATA)?

 
Также может означать:
КонстантаТипОС
EPFNOSUPPORTerrnoLinux
EDESTADDRREQerrnoSolaris
PROCESS_INITIALIZATION_FAILEDКод BSODWindows
Предыдущий Следующий
EPFNOSUPPORT EDESTADDRREQ

ENODATA

На этой странице рассматривается состояние В потоке STREAM Darwin нет доступного сообщения. Операция чтения или управления, совместимая со STREAMS, не обнаружила сообщения или данных в требуемом контексте потока.

Значение на этой платформе

Обработка системных вызовов Darwin BSD: состояние «в потоке STREAM Darwin нет доступного сообщения» относится к Darwin errno и должно декодироваться по точному заголовку SDK или XNU, использованному целевой системой. Расширения Darwin и устаревшие имена STREAMS, связанные с отсутствием доступного сообщения в потоке STREAM Darwin, могут отличаться наличием или нумерацией в других UNIX-подобных системах. В рамках Обработки системных вызовов Darwin BSD формулировка, связанная с ENODATA, указывает на исходный интерфейс, но не доказывает, что код вернула современная подсистема с похожим названием.

Darwin назначает нескольким символам errno вне POSIX собственные значения и номера при диагностике отсутствия сообщения в потоке STREAMS. При исследовании отсутствия сообщения в потоке STREAM Darwin не декодируйте число по таблице Linux и не считайте, что тот же символ возвращается тем же API в другой ОС.

Данные, определяющие владельца ошибки

СведенияНа какой вопрос отвечают
Тип файлового дескриптора, подключённые модули, полоса сообщения, операция, флаги и состояние производителя.Связывают отсутствие сообщения в потоке STREAM Darwin с конкретным действующим объектом API, а не только с переведённым сообщением.
Значение Darwin errno и версия заголовка SDK/XNU, по которому оно декодировано при диагностике отсутствия сообщения в потоке STREAM Darwin.Показывают, возникло ли это состояние в ABI вызывающей стороны, оболочке или поставщике.
Результат первого системного вызова или ioctl, а также процесс, поток и поколение объекта при исследовании отсутствия сообщения в потоке STREAM Darwin.Сохраняют первую границу до того, как errno может быть перезаписан при диагностике отсутствия сообщения в потоке STREAMS.
Заведомо исправный объект того же класса в той же сборке macOS при диагностике отсутствия сообщения в потоке STREAMS.Даёт контрольное сравнение на той же платформе для случая отсутствия сообщения в потоке STREAM Darwin.

Сохраните errno сразу после отказавшего вызова, вернувшего состояние В потоке STREAM Darwin нет доступного сообщения, до выполнения форматирования, трассировки, выделения памяти или очистки. Для В потоке STREAM Darwin нет доступного сообщения также сохраните возвращаемое значение функции, поскольку многие интерфейсы C сообщают об ошибке через него, а errno используют лишь как дополнительную информацию.

Последовательность проверки

  1. Отправьте одно известное сообщение через контролируемую конечную точку потока. После контрольной операции повторите исходный вызов, чтобы результат оставался относящимся к отсутствию сообщения в потоке STREAM Darwin.
  2. Немедленно сохраните errno и сравните связанное возвращаемое значение при диагностике отсутствия сообщения в потоке STREAMS. При проверке отсутствия данных STREAMS не меняйте двоичный файл, ABI заголовков и поставщика.
  3. Повторите тест с одним контролируемым объектом, сохранив идентификатор и песочницу без изменений при диагностике отсутствия сообщения в потоке STREAMS. Зафиксируйте, достигает ли проверка отсутствия данных STREAMS той же границы системного вызова или среды выполнения, что и исходная ошибка.

Особенно показательны два наблюдения: тип файлового дескриптора, подключённые модули, полоса сообщения, операция, флаги и состояние производителя. В качестве контроля отправьте одно известное сообщение через управляемую конечную точку потока. Для состояния В потоке STREAM Darwin нет доступного сообщения эти данные позволяют отличить устаревший идентификатор или неподдерживаемый запрос от общего отказа поставщика без масштабных изменений узла.

Предостережение о переносимости

Соблазнительное предположениеБолее безопасная интерпретация
Английская фраза считается переносимой между платформамиОтсутствие сообщения в потоке STREAM Darwin относится к обработке системных вызовов Darwin BSD; до применения таблицы errno другой платформы проверьте заголовки целевой системы и API, вернувший код
Повтор завершился успешно и стёр исходные данныеПовтор может заменить исходную ошибку другим состоянием; заранее сохраните первый вызов, числовое значение и поколение объекта

Если оболочка преобразует состояние В потоке STREAM Darwin нет доступного сообщения в исключение или логическое значение, добавьте инструментирование ниже этой оболочки. Для В потоке STREAM Darwin нет доступного сообщения решающее значение имеет системный вызов, ioctl, функция CRT или точка входа совместимости, впервые предоставившая код.

Узкое исправление

Целевое исправление. Восстановите состояние производителя или модуля либо перейдите на поддерживаемый API сокетов или IPC; явно обрабатывайте пустое состояние.

Доказательство отсутствия регрессии. Доступность сообщений и поведение пустого состояния должны быть детерминированными без активного повторения. Проверьте один поддерживаемый граничный случай и один намеренно отрицательный случай, чтобы обработка состояния В потоке STREAM Darwin нет доступного сообщения оставалась явной.

Технические ссылки

Эти источники владельцев и стандартов определяют пространство имён и контракт подсистемы, необходимые для проверки Обработки системных вызовов Darwin BSD ENODATA в установленной версии платформы.

  • Apple XNU: errno.h — определяет пространство статусов, используемое для отсутствия сообщения в потоке STREAM Darwin.
  • Apple: ошибки системных вызовов intro(2) — описывает границу API или жизненного цикла, связанную с этим состоянием.
  • Apple OSS: исходный код XNU — предоставляет контекст ABI, реализации или протокола при диагностике отсутствия сообщения в потоке STREAMS.
  • The Open Group: errno.h — определяет ограничения переносимости и проверки для этого состояния.

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