La RFC décrivant TCP précise qu'apres la fermeture d'une socket, elle doit rester "inutilisable" pendant un certain temps (typiquement le round-trip time maxi défini pour une communication TCP), pour éviter qu'à une réouverture avec les mêmes ports, on se récupère des bouts de paquets de la connexion précédente qui étaient en transit dans les méandres d'internet.
Apres avoir terminé une socket, regarde avec la commande "netstat -ap --ip" la liste des sockets existantes dans le système: celles qui sont fermées sont par exemple dans un état "TIME_WAIT".
Pour forcer le bind d'une socket à l'identique avant expiration du délai, on peut fournir l'option de socket SO_REUSEADDR.
En C on ferait setsockopt(s,SOL_SOCKET,SO_REUSEADDR, ...) (man setsockopt, man 7 socket) ; en perl il doit y avoir l'équivalent.
# C'est une feature, pas un bug
Posté par daggett . En réponse au message Fermer proprement un socket. Évalué à 6.
Apres avoir terminé une socket, regarde avec la commande "netstat -ap --ip" la liste des sockets existantes dans le système: celles qui sont fermées sont par exemple dans un état "TIME_WAIT".
Pour forcer le bind d'une socket à l'identique avant expiration du délai, on peut fournir l'option de socket SO_REUSEADDR.
En C on ferait setsockopt(s,SOL_SOCKET,SO_REUSEADDR, ...) (man setsockopt, man 7 socket) ; en perl il doit y avoir l'équivalent.