Jak jest zgłaszany błąd z połączenia z gniazdem asynchronicznym?


7

Podłączam gniazdo asynchronicznie (O_NONBLOCK + connect). Standard POSIX określa, że ​​po podłączeniu gniazda powinien sygnalizować zdarzenie, wykonując deskryptor pliku gniazda gotowego do zapisu. Wygląda na to, że nic nie mówi o awariach podczas połączenia asynchronicznego.

Podczas testowania go na Linuksie wydaje mi się, że czasami dostaję POLLOUT, a czasami POLLERR w tej sytuacji. Czy jest jakiś wzór w tym zachowaniu? Czy mogę zgłosić błędy w jeden sposób? Czy POSIX mówi coś, co przeoczyłem?

4

D. J. Bernstein ma kilka rzeczy, które mogą być istotne: http://cr.yp.to/docs/connect.html. W szczególności sugeruje kilka różnych sposobów na uniknięcie błędów.

UNIX Gniazdo posiada sekcję FAQ na Connect with timeout, które obejmuje uzyskiwanie błąd po nieudanym związku z zastosowaniem getsockopt

  0

Oba teksty zakładają, że connect powiadamia użytkownika o sukcesie połączenia/nieprzestrzegania przez zdarzenia POLLOUT. Jednak widzę, że Linux używa do tego celu opcji POLLOUT lub POLLERR. 22 lut. 092009-02-22 11:28:09