2009-11-15 14 views
0

J'ai récemment commencé à apprendre la programmation réseau sous Linux et il semble que je ne puisse pas trouver la bonne façon de détecter si une connexion à un hôte distant a été établie. ATM toutes les connexions non établies sont enregistrées dans une instance epoll. Lorsqu'un événement avec l'indicateur EPOLLOUT défini sur 1 arrive, la connexion est marquée comme établie. Aussi simple que cela, mais je le fais bien ...Détecter si la connexion a été établie

Y at-il une meilleure façon de le faire? Et si ce n'est pas le cas, attendre sur une socket pour devenir accessible en écriture est-il un bon moyen de garantir que la connexion a été établie?

+0

Veuillez nous indiquer le code que vous utilisez pour vous connecter. – bmargulies

Répondre

0

poll/epoll/select devrait fonctionner tous. La page de manuel pour connect(2) indique que vous obtenez EINPROGRESS, et que vous pouvez détecter la complétion en utilisant select ou poll pour vérifier qu'il est accessible en écriture. Ensuite, utilisez getsockopt pour vérifier le statut SOL_SOCKET, SO_ERROR, pour voir si la connexion a réussi ou échoué.

Si vous réessayez de vous connecter alors qu'il essaie toujours, vous obtenez EALREADY.

Donc, c'est la façon documentée de le faire, et ça me semble bien.

Questions connexes