2010-12-05 4 views
1

J'ai remarqué que parfois sélectionner les retours avec Connection Timed out sur errno, mais je ne sais pas pourquoi il le ferait, comment le saurait-il? Et comment voulez-vous faire face à cela? (Im devinant cela signifie que l'une des connexions a expiré, peut-être un ACK n'a pas été entendu de retour à un moment approprié). Id imaginer le seul cas légitime de ce serait si une socket serveur est là et vous avez exécuté une connexion non bloquante avant? Dans ce cas, l'exécution d'une connexion sur cette socket vous reviendrait à nouveau si elle était connectée ou non, et ce serait le moyen de gérer cela .... mais y a-t-il un meilleur moyen?Que signifie un délai d'attente de connexion dans le contexte d'un appel select()

Merci d'avance.

+0

Oui, cela ne devrait se produire qu'avec 'connect', mais j'oublie la bonne façon d'utiliser' connect' avec 'select', donc j'écris cela comme un commentaire plutôt qu'une réponse. –

Répondre

0

Comme le commentateur ci-dessus l'a dit, c'est probablement le résultat d'un select() sur un connect() non-bloquant. À moins qu'il s'agisse d'un délai d'attente en général, dans ce cas, cela peut arriver aussi bien pour les sockets TCP entrantes acceptées. De toute façon, voici deux guides très utiles pour vous rafraîchir la mémoire sur l'utilisation de select():

http://www.lowtek.com/sockets/select.html

http://beej.us/guide/bgnet/output/html/multipage/advanced.html#select

http://beej.us/guide/bgnet/output/html/multipage/advanced.html#blocking

Voir aussi cette question pour un exemple Python:

How can I get non-blocking socket connect()'s?

Cheers.

Questions connexes