133 votes

Comment fermer de force un socket en TIME_WAIT ?

Je lance un programme particulier sur Linux qui plante parfois. Si vous l'ouvrez rapidement après cela, il écoute sur le socket 49201 au lieu de 49200 comme il l'a fait la première fois. netstat révèle que 49200 est dans un état TIME_WAIT.

Y a-t-il un programme que vous pouvez exécuter pour forcer immédiatement ce socket à sortir de l'état TIME_WAIT ?

1 votes

Si vous êtes ici en raison de "trop de TIME_WAIT sur le serveur", il suffit de passer les trois premières réponses qui évitent la question au lieu d'y répondre.

0 votes

J'ai accepté ce qui était la 4e réponse, elle devrait donc être en haut maintenant

0 votes

3voto

andrew pate Points 251

Une solution alternative serait d'avoir un logiciel de proxy fiable ou de redirection de port qui écoute sur le port 49200, puis de transférer la connexion vers l'une des plusieurs instances de votre programme moins fiable utilisant des ports différents... HAPROXY me vient à l'esprit.

En passant, le port sur lequel vous vous connectez est assez élevé. Vous pourriez essayer d'utiliser un port inutilisé juste au-dessus de la plage 0-1024. Votre système est moins susceptible d'utiliser un numéro de port inférieur en tant que port éphémère.

0voto

TIME_WAIT est le problème le plus courant dans l'architecture client-serveur de programmation de sockets. Attendre quelques secondes en essayant périodiquement est la meilleure solution. Pour les applications en temps réel, le serveur doit se remettre immédiatement en marche. Il y a l'option SO_REUSEADDR pour eux.

SistemesEz.com

SystemesEZ est une communauté de sysadmins où vous pouvez résoudre vos problèmes et vos doutes. Vous pouvez consulter les questions des autres sysadmins, poser vos propres questions ou résoudre celles des autres.

Powered by:

X