recv() socket windows prend un temps infini - comment timeout?
- Je utiliser les descripteurs de fichier pour trouver l'lisible sockets et de la lecture. Pour certaines raisons, un socket qui n'a pas de données sur le câble, continue à lire et à ne jamais revenir. Est-il possible que je puisse venir de la recevoir après un délai d'attente?
Je suis en utilisant winsock bibliothèque..
OriginalL'auteur ssk | 2011-07-20
Vous devez vous connecter pour publier un commentaire.
http://tangentsoft.net/wskfaq/newbie.html#timeout
2.15 - Comment puis-je modifier le délai d'attente pour un Winsock fonction?
Certains de blocage Winsock fonctions (par exemple, connect()) ont un délai d'attente intégré en eux. La théorie derrière cela est que seule la pile contient toutes les informations nécessaires pour définir un bon délai. Pourtant, certaines personnes trouvent que la valeur de la pile utilise est trop long pour leur application; il peut être une minute ou plus.
Vous pouvez ajuster la send() et recv() délais d'attente avec le SO_SNDTIMEO et SO_RCVTIMEO setsockopt() options. .
Pour d'autres Winsock fonctions, la meilleure solution est d'éviter le blocage de sockets tout à fait. Tous les socket non bloquant méthodes vous permettent de personnaliser les délais d'expiration:
Noter qu'avec asynchrone et non-blocage des sockets, vous pouvez être en mesure d'éviter la manipulation de délais d'attente tout à fait. Votre programme continue à travailler alors même qu'Winsock est occupé. Ainsi, vous pouvez le laisser à l'utilisateur d'annuler une opération qui prend trop de temps, ou tout simplement laisser Winsock naturel du délai d'attente expire plutôt que de prendre au cours de cette fonctionnalité dans votre code.
OriginalL'auteur Ben B