Après avoir établi une connexion tcp avec un serveur, je ferme mon application linux et Socket.close() est appelée.La connexion tcp dans TIME_WAIT ne permet pas la reconnexion, java
Vérification de netstat -pant, je vois que la connexion est dans l'état TIME_WAIT. Cela m'empêche de rétablir immédiatement la connexion au serveur puisque j'utilise le même port pour me connecter. Au lieu de cela, je dois attendre la connexion au timeout du statut TIME_WAIT avant de pouvoir me reconnecter. J'ai joué - sans trop de chance - avec les méthodes de socket: set_so_timeout(), set_keepalive(), set_so_linger(), et set_reuseaddr() - l'orthographe exacte de la méthode peut ne pas être correcte dans ce post.
Ma question est COMMENT comment puis-je faire sortir la connexion du statut TIME_WAIT pour que je puisse à nouveau établir une connexion instantanément?
Faites-le moi savoir s'il vous plaît.
Merci, JBU
Oui, le port différent résout le problème et je vais l'utiliser pour l'instant. Cependant, la description de la méthode so_linger semble devoir fonctionner si je veux utiliser le même port source. Je ne suis pas sûr de savoir pourquoi. – jbu
SO_LINGER n'est définitivement pas recommandé. Son support est, au mieux, sporadique sur des plates-formes non-BSD. – paxdiablo
Je ne pense pas que l'utilisation d'une autre chaîne de connexion est une solution élégante, il devrait y avoir un moyen de forcer le TCP/IP à vider tout le contenu du socket et à fermer la connexion. –