[*]create the socket with socket() and set O_NONBLOCK
[*]call connect (to a non-listening port), get -1 with errno == EINPROGRESS
[*]use epoll to wait for the socket Чтобы можно было записаться < /li>
Как только сокет подходит для записи, вызов Getockopt для получения SO_ERROR, а ошибка - 0 < /li>
В конечном итоге соединение потерпела неудачу, поэтому попытки написать гнездо, что я вызывает ошибку < /li>
< /ol>
, я выставлю это. Enotconn возвращается к шагу 3. Мои вопросы: < /p>
- Это нормальное поведение от ядра Linux, или я сделал некоторую ошибку в том, как я обрабатываю Epoll или не блокировку подключения? Другой вариант-вызов Connect во второй раз и посмотреть, является ли Errno Erlready, Eisconn или какая-то другая ошибка. < /Li>
Есть ли какой-то другой шаблон, который я должен использовать при создании неблокирующих соединений TCP? Это критичный код производительности, и getPeerName () должен произойти в общем случае, к сожалению.
Подробнее здесь: https://stackoverflow.com/questions/797 ... used-error