Question

Client fermer la prise d'abord, quand il n'y a pas beaucoup de données à partir du serveur, l'arrêt de connexion tcp est correct comme:

FIN -->
   <-- ACK
   <-- FIN, ACK
ACK -->

Lorsque le serveur est l'envoi de données affairait:

FIN -->
    <-- ACK,PSH
RST -->

Et la connexion du serveur vient à Close_Wait état et accrocher là pour longtemps.

Quel est le problème ici? client lié ou serveur lié? Cela se produit sur RedHat5 pour les prises locales.

article pourquoi parler de « RST » est envoyé, mais je ne sais pas pourquoi la connexion du serveur bloqué sur CLOSE_WAIT, et ne pas envoyer un FIN sur.

[EDIT] J'ignoré les informations les plus importantes, ce qui se passe sur l'émulation de réseau slirp de qemu. Il semble être un problème de bug slirp pour traiter des liens étroits.

Était-ce utile?

La solution 3

a connu défaut pour qemu.

Autres conseils

Cela signifie qu'il ya des données non lus gauche dans dans le flux, que le client n'a pas fini de lire.

Vous pouvez le forcer hors service en utilisant l'option SO_LINGER. Voici la documentation pertinente pour Linux (voir aussi l'option elle-même, ici ), et [voici le fonction2 correspondant] pour Win32

Il est du côté du serveur qui demeure ouverte, il est donc du côté du serveur, vous pouvez essayer de désactiver SO_LINGER.

Il peut signifier que le serveur n'a pas fermé la prise. Vous pouvez facilement le dire en utilisant « lsof » à la liste des descripteurs de fichiers ouverts par ce processus qui comprendra des sockets TCP. Le correctif est d'avoir le processus toujours fermer la prise quand il est fini (même en cas d'erreur, etc.)

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top