Site icon EfmSoft

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

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

EINPROGRESS

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

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

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

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

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

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

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

Ссылки


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

Exit mobile version