Wie wird ein Fehler von Async-Socket-Verbindung gemeldet?


7

Ich verbinde einen Socket asynchron (O_NONBLOCK + connect). Der POSIX-Standard gibt an, dass nach dem Verbinden des Sockets das Ereignis gemeldet werden soll, indem der Dateideskriptor für das Socket schreibbereit gemacht wird. Es scheint nichts über Fehler während der asynchronen Verbindung zu sagen.

Beim Testen unter Linux scheint es manchmal, dass ich POLLOUT und manchmal POLLERR in dieser Situation bekomme. Gibt es ein Muster im Verhalten? Kann ich die Fehler auf eine Art melden? Sagt POSIX etwas, das ich übersehen habe?

4

D.J. Bernstein hat ein paar Dinge, die aussehen könnten, als ob es relevant wäre: http://cr.yp.to/docs/connect.html. Insbesondere schlägt er verschiedene Möglichkeiten vor, um Fehler zu vermeiden.

Die UNIX-Socket-FAQ hat einen Abschnitt über Connect with timeout, die den Fehler von einer ausgefallenen Verbindung mit getsockopt

  0

Beiden Texten übernehmen beinhalten bekommen, dass die Verbindungs ​​den Benutzer über Verbindungs ​​Erfolg/Misserfolg von POLLOUT Ereignisse benachrichtigt. Was ich jedoch sehe, ist, dass Linux zu diesem Zweck entweder POLLOUT oder POLLERR verwendet. 22 feb. 092009-02-22 11:28:09