Что означает код errno 35 (EAGAIN)?

 
Также может означать:
КонстантаТипОС
KERN_INVALID_SECURITYКод возврата ядра macOSmacOS
ippStsDoubleSizeСтатус Intel IPPЛюбая
EDEADLKerrnoLinux
ENOMSGerrnoSolaris
FAT_FILE_SYSTEMКод BSODWindows
Предыдущий Следующий
EDEADLK ENOMSG

EAGAIN

Результат готовности, а не доказательство отказа другой стороны

EAGAIN часто возникает, когда операция намеренно выполняется в неблокирующем режиме и немедленное продвижение невозможно. Для доступного для записи сокета или канала это может означать, что управление потоком остановило текущую запись; в других API код может указывать на временную нехватку ресурса. Вызов не завершён, поэтому приложение должно сохранить точное состояние ещё не отправленных или не прочитанных данных.

Активный цикл повторных попыток обычно является неправильной реакцией. Дождитесь механизма готовности или завершения, связанного с дескриптором, а затем продолжите с той границы байтов или сообщений, которую фактически сообщил предыдущий вызов. Отличайте EAGAIN от ETIMEDOUT: первый код означает «не сейчас», а второй — истечение срока ожидания вызывающей стороны.

Какие данные делают диагностику полезной

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

Ссылки


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