Как сообщается об ошибке в async socket connect?


7

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

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

4

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

UNIX Оправа FAQ имеет раздел Connect with timeout, который включает в себя получение ошибки из неудачного соединения с использованием getsockopt

  0

Оба текста предполагают, что подключения уведомляет пользователя о связи успеха/неуспеха по POLLOUT события. Однако я вижу, что для этой цели Linux использует POLLOUT или POLLERR. 22 фев. 092009-02-22 11:28:09