| Предыдущий | Следующий |
| EALREADY | ESTALE |
EINPROGRESS
Ожидаемый асинхронный ход неблокирующего подключения
EINPROGRESS часто является нормальным промежуточным результатом, а не окончательной ошибкой подключения. Solaris приводит в качестве примера неблокирующий connect() : операция требует времени, поэтому вызов возвращает управление, пока установление подключения продолжается.
Это состояние отличается от EALREADY. EINPROGRESS сообщает, что асинхронная операция была начата; EALREADY может сообщить о новой попытке, выполненной пока операция всё ещё не завершена. Событийным клиентам требуется отдельное состояние connecting для представления этого интервала.
Обработка незавершённой операции
- Зарегистрируйте сокет в механизме готовности/завершения, используемом программой, и отдельно храните крайний срок подключения.
- После уведомления о завершении получите окончательный статус подключения, прежде чем помечать сокет как подключённый.
- Не позволяйте путям отправки/приёма считать конечную точку установленной только потому, что первоначальный
connect()вернул управление.
Ссылки
- Oracle Solaris: каталог errno intro(2)
- POSIX: условия ошибок connect()
- POSIX: правила domain, type и protocol для socket()
Нужно найти другой код? Найти другой код состояния или ошибки.