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 -->
3 Réponses :
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. P>
Vous pouvez le forcer en utilisant l'option 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 CODE>. Voici la documentation pertinente pour Linux (voir également l'option elle-même, ici ), et [voici la fonction correspondante2] pour Win32. P>
SO_LINGER CODE>. P>
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 ...
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.) P>
Le problème est que le serveur est suspendu à l'appel d'écriture, et je ne peux pas détecter l'erreur.