Le lundi 3 juillet 2006 11:19, Xavier Bestel a écrit :
> Si ma mémoire est bonne, c'est qu'elles n'ont pas été fermées de
> l'autre côté. Si ça te pose des problèmes de réutilisation de ces
> sockets, ouvre-les avec SO_REUSADDRESS au départ.
Le lundi 3 juillet, Frédéric a répondu :
> Ce n'est pas moi qui ai écrit le framework d'échange réseau... Je n'ai
> pas vu de problème de ré-utilisation de ce sockets. Ou du moins pas
> encore. Est-ce que ça risque d'arriver ? Vais-je me retrouver à un
> moment ou à un autre avec l'impossibilité de me connecter, faute de
> sockets dispos ? Ou le système est-il capable d'en allouer 'ad vitam
> eternam' ?
Si les sockets sont bien fermés, tu ne devrais pas courir le risque de
te retrouver à court de sockets, à moins de gérer un très grand nombre
de connexions par seconde. En effet, le socket fermé est automatiquement
libéré par la pile IP après un certain temps. C.f. man 7 ip :
L'adresse locale d'une socket TCP qui a été attachée est indisponible
pendant quelques instants après sa fermeture, à moins que l'attribut
SO_REUSEADDR ait été activé. Il faut être prudent en utilisant ce dra-
peau, car il rend le protocole TCP moins fiable.
La raison d'être de ce délai est qu'il est toujours possible de recevoir
des paquets après la fermeture du socket, notamment des retransmissions
TCP. Ces « paquets perdus » risquent de perturber une nouvelle connexion
qui utilise le même port. C'est pour ça que le man dit que la
suppression de ce délai (option SO_REUSEADDR) « rend le protocole TCP
moins fiable. »
--
Edgar Bonet Maison : 04 76 21 29 16 Bureau : 04 76 88 10 96
3 rue Jean Prévost Mobile : 06 77 19 79 39 Fax : 04 76 88 11 91
38000 Grenoble guilde@??? www.edgar-bonet.org