Что означает код errno 36 (EINPROGRESS)?

 
Также может означать:
КонстантаТипОС
ERROR_SHARING_BUFFER_EXCEEDEDОшибка WindowsWindows
KERN_NOT_DEPRESSEDКод возврата ядра macOSmacOS
ippStsNotSupportedCpuСтатус Intel IPPЛюбая
ENAMETOOLONGerrnoLinux
EIDRMerrnoSolaris
EDEADLKerrnoWindows
NTFS_FILE_SYSTEMКод BSODWindows
Предыдущий Следующий
ENAMETOOLONG EIDRM

EINPROGRESS

Ожидающая операция, а не завершённое соединение

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

Рассматривайте этот результат как переход состояния. Повторение connect() в тесном цикле может заменить полезные данные кодом EALREADY или скрыть окончательный результат. Дождитесь механизма готовности, используемого приложением, затем прочитайте ожидающую ошибку сокета через getsockopt(..., SO_ERROR, ...) и только после этого объявляйте успех.

Что сохранить для диагностики

  • Сохраните семейство адресов, тип сокета, протокол, признак неблокирующего режима, локальный и удалённый адреса и момент начала попытки.
  • Запишите событие готовности и последующее значение SO_ERROR. Сама по себе доступность для записи не доказывает успех неблокирующего подключения.
  • Не смешивайте срок ожидания соединения с состоянием ядра: тайм-аут приложения может отменить всё ещё ожидающую попытку, не доказывая, что сеть её отклонила.

Не путайте с другими кодами

EALREADY означает, что на том же объекте уже ожидает другая операция; EISCONN означает, что у сокета уже есть подключённая другая сторона. Из этих трёх кодов только EINPROGRESS обычно описывает первое наблюдаемое ожидающее состояние.

Ссылки


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