блокирование tcp соединяется с epoll

Мое приложение Linux выполняет не блокирующееся подключение TCP syscall, и затем используйте epoll_wait обнаружить завершение трехэтапного квитирования. Иногда epoll_wait возвраты с обоими POLLOUT & POLLERR события установлены для того же дескриптора сокета.

Я хотел бы понять то, что продолжается на уровне TCP. Я не могу воспроизвести его по требованию. Мое предположение то, что между двумя вызовами к epoll_wait в моем цикле событий у нас была последовательность SYN+ACK/ACK/FIN, но снова я не могу воспроизвести его.

5
задан brian d foy 12 January 2013 в 11:19
поделиться

1 ответ

Это может произойти, если соединение не удалось - например, с "время ожидания соединения истекло" (для сокетов, выполняющих неблокирующее соединение, устанавливается POLLOUT когда операция подключения завершена как для успешных, так и для неудачных результатов).

Когда POLLOUT становится установленным для сокета, используйте getsockopt (sock, SOL_SOCKET, SO_ERROR, ...) , чтобы проверить, было ли соединение успешным или нет ( SO_ERROR параметр сокета в этом случае равен 0, а в противном случае указывает, почему соединение не удалось).

6
ответ дан 13 December 2019 в 22:03
поделиться
Другие вопросы по тегам:

Похожие вопросы: