Как сообщается об ошибке подключения асинхронного сокета? - PullRequest
7 голосов
/ 22 февраля 2009

Я подключаю сокет асинхронно (O_NONBLOCK + connect). Стандарт POSIX указывает, что после того, как сокет был подключен, он должен сигнализировать о событии, сделав файловый дескриптор сокета готовым к записи. Кажется, он ничего не говорит о сбоях во время асинхронного соединения.

При тестировании в Linux кажется, что иногда я получаю POLLOUT, а иногда и POLLERR в этой ситуации. Есть ли какая-то закономерность в поведении? Могу ли я сделать так, чтобы он сообщал об ошибках одним способом? POSIX говорит что-то, что я упустил?

1 Ответ

4 голосов
/ 22 февраля 2009

D. У Дж. Бернштейна есть кое-что, что может показаться уместным: http://cr.yp.to/docs/connect.html. В частности, он предлагает несколько разных способов вывести ошибки.

В разделе часто задаваемых вопросов по сокетам UNIX есть раздел Соединение с тайм-аутом , который включает получение сообщения об ошибке при сбое соединения с использованием getsockopt

...