J'avais l'habitude de penser qu'en utilisant SocketOptionName.ReuseAddress
, je peux réutiliser un port qui est dans l'état TIME_WAIT
. Mais j'ai essayé de l'expérimenter et il semble que cela n'a aucun effet.À quoi sert SocketOptionName.ReuseAddress?
Si je vérifie prises à l'aide netstat
, et il montre la prise est en TIME_WAIT
état et je diffusons immédiatement à nouveau le client, je reçois l'exception:
Une seule utilisation de chaque adresse de socket (protocole/réseau adresse/port) est normalement autorisé 172.16.16.16:12345
Je ne peux rien en tirer. S'il vous plaît pouvez-vous élaborer à quoi sert SocketOptionName.ReuseAddress?
Merci pour la réponse. Dans ma vraie application, je ne lie pas le client à un port. Mais cette application a BEAUCOUP de connexion entrante donc elle peut manquer de ports libres (pas dans l'état TIME_WAIT). Pour simuler cette condition, j'ai explicitement fait cela. – Hemant
Donc, votre problème actuel est que vous avez un serveur, avec des connexions entrantes et ils se retrouvent dans TIME_WAIT et vous préféreriez qu'ils ne le fassent pas. Il y a généralement de meilleurs moyens de résoudre ce problème particulier: 1) pouvez-vous déplacer la fermeture active vers le client? 2) si vous ne pouvez pas faire une clôture avortée et envoyer un «RST» plutôt que de faire une fermeture normale? etc. Néanmoins, au moins vous avez essayé cette route plutôt que de simplement décider de raccourcir la période 'TIME_WAIT' sur une base de machine ... Recherche ici, il y a beaucoup de questions à ce sujet. –