Les connexions Tcp accrocher sur CLOSE_WAIT état
Client fermer le socket d'abord, quand il n'y a pas beaucoup de données à partir du serveur, la connexion tcp de l'arrêt est d'accord aime:
FIN -->
<-- ACK
<-- FIN, ACK
ACK -->
Lorsque le serveur est occupés de l'envoi des données:
FIN -->
<-- ACK,PSH
RST -->
Et la connexion avec le serveur vient à CLOSE_WAIT état et l'accrocher là pour un long moment.
Quel est le problème ici? client associé ou liée au serveur? Ce qui se passe sur Redhat5 locales pour les sockets.
Ce l'article parler de pourquoi "PREMIER" est envoyé, mais je ne sais pas pourquoi la connexion au serveur coincé sur CLOSE_WAIT, et n'envoyez pas une FIN.
[EDIT]j'ai ignoré les informations les plus importantes, ce qui se passe sur qemu est slirp réseau d'émulation. Il semble y avoir un problème de slirp bug pour traiter la fermeture de la connexion.
OriginalL'auteur Sam Liao | 2009-12-16
Vous devez vous connecter pour publier un commentaire.
Cela signifie qu'il est non lus données dans le flux, que le client n'a pas fini de le lire.
Vous pouvez le forcer en utilisant les
SO_LINGER
option. Voici la documentation pertinente pour Linux (voir aussi l'option elle-même, ici), et [voici la correspondance des fonction2] pour Win32.C'est le côté serveur qui reste ouvert, c'est donc du côté serveur, vous pouvez essayer de désactiver les
SO_LINGER
.Si le serveur est suspendu sur un appel d'écriture, alors vous avez probablement rempli la fenêtre TCP et la pile est en attente pour les accusés de réception de la part du client avant d'accepter plus de données à envoyer...
OriginalL'auteur unwind
Cela peut signifier que le serveur n'a pas fermé la prise. Vous pouvez facilement faire cela en utilisant "lsof" à la liste des descripteurs de fichiers ouverts par le processus qui comprendra des sockets TCP. La solution est d'avoir le processus de toujours fermer le socket quand il est terminé (même en cas d'erreur, etc)
OriginalL'auteur MarkR
Ce connu défaut pour qemu.
OriginalL'auteur Sam Liao