2010-03-28 7 views
2

J'ai donc besoin de fermer une connexion particulière, mais le problème est qu'un autre thread fait en même temps un select() qui a le socket comme l'un des descripteurs de fichiers qu'il regarde.Fermer socket et select()

Est-ce que select() se terminera gracieusement, ou est-ce que quelque chose de mal arrivera?

+0

Dup. http://stackoverflow.com/questions/543541/what-does-select2-do-if-you-close2-a-file-descriptor-in-a-separate-thread et http://stackoverflow.com/questions/ 458558/select-sur-udp-socket-doesnt-end-when-socket-est-fermé-ce-que-je-fais-mal – Duck

Répondre

0

Je ne suis pas sûr à 100%, mais rien de mauvais ne devrait se produire si vous fermez le socket après le a commencé. select() retournera une erreur si vous passez déjà fermée au début (voir man page).

En outre, si vous utilisez select() pour attendre que les données soient lues, vous pouvez indiquer que ce socket fermé est prêt pour la lecture (car la lecture ne bloquera pas le socket fermé).

Vous pouvez écrire un programme simple et vérifier réellement ce qui se passera sur votre système.

0

Voir la réponse que je suis arrivé à peu près la même question:

Wake up thread blocked on accept() call

Réponse courte: ont votre appel select attente sur deux poignées fichier: la prise et la lecture côté du tuyau.