Comment une erreur signalée par une socket asynchrone est-elle connectée?


7

Je connecte une socket de manière asynchrone (O_NONBLOCK + connect). La norme POSIX spécifie que, une fois le socket connecté, il doit signaler l'événement en rendant le descripteur de fichier du socket prêt à être écrit. Il ne semble rien dire sur les échecs lors de la connexion asynchrone. Quand je le teste sur Linux, il semble que parfois je reçois POLLOUT et parfois POLLERR dans cette situation. Y a-t-il un modèle dans le comportement? Puis-je lui faire signaler les erreurs d'une seule façon? Est-ce que POSIX dit quelque chose que j'ai oublié?

4

D. Bernstein a quelque chose qui semble être pertinent: http://cr.yp.to/docs/connect.html. En particulier, il suggère plusieurs façons différentes d'éliminer les erreurs.

La FAQ UNIX Socket a une section sur Connect with timeout, qui comprend obtenir l'erreur d'échec d'une connexion à l'aide getsockopt

  0

Les deux textes supposent que la connexion informe l'utilisateur sur le succès de connexion/échec par événement POLLOUT. Cependant, ce que je vois est que Linux utilise POLLOUT ou POLLERR à cette fin. 22 févr.. 092009-02-22 11:28:09