11
votes

Les connexions TCP accrochent sur le statut de près_wait

Client Client Fermer la prise d'abord, lorsqu'il n'y a pas beaucoup de données de Server, l'arrêt de la connexion TCP est correct:

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


0 commentaires

3 Réponses :


2
votes

Cela signifie que les données non réalisées sont laissées dans le flux, que le client n'a pas fini de lire.

Vous pouvez le forcer en utilisant l'option SO_LINGER . Voici la documentation pertinente pour Linux (voir également l'option elle-même, ici ), et [voici la fonction correspondante2] pour Win32.

C'est le côté serveur qui reste ouvert, il est donc sur le côté serveur, vous pouvez essayer de désactiver SO_LINGER .


2 commentaires

Il semble que le SO_LINGER n'influence que l'appel étroit (), mais le serveur accrocher à écrire () appelez à la place?


Si le serveur est suspendu à un appel d'écriture, vous avez probablement rempli la fenêtre TCP et que la pile attend des acks du client avant d'accepter plus de données à envoyer ...



0
votes

Cela peut signifier que le serveur n'a pas fermé la prise. Vous pouvez facilement le dire à cela en utilisant "LSOF" pour répertorier les descripteurs de fichiers ouverts par ce processus qui inclura des sockets TCP. Le correctif est d'avoir le processus toujours fermer la prise lors de sa finition (même dans les cas d'erreur, etc.)


1 commentaires

Le problème est que le serveur est suspendu à l'appel d'écriture, et je ne peux pas détecter l'erreur.



0
votes

Ceci est connu Défaut pour QEMU.


0 commentaires