Je travaille avec une application commerciale qui lance une SocketException avec le message,
Une connexion existante a été fermée de force par l'hôte distant.
Cela se produit lors d'une connexion par socket entre le client et le serveur. La connexion est bien vivante et des tonnes de données sont transférées, mais elle est ensuite déconnectée sans que l'on s'en aperçoive.
Quelqu'un a-t-il déjà vu cela ? Quelles peuvent en être les causes ? Je peux deviner quelques causes, mais y a-t-il un moyen d'en ajouter d'autres dans ce code pour trouver la cause ?
Tous les commentaires et idées sont les bienvenus.
... Les dernières ...
Je dispose d'un certain nombre d'enregistrements provenant d'un traçage .NET,
System.Net.Sockets Verbose: 0 : [8188] Socket#30180123::Send() DateTime=2010-04-07T20:49:48.6317500Z
System.Net.Sockets Error: 0 : [8188] Exception in the Socket#30180123::Send - An existing connection was forcibly closed by the remote host DateTime=2010-04-07T20:49:48.6317500Z
System.Net.Sockets Verbose: 0 : [8188] Exiting Socket#30180123::Send() -> 0#0
Sur la base d'autres parties de l'enregistrement que j'ai vues, le fait qu'il soit dit 0#0
signifie qu'un paquet de 0 octet est envoyé. Mais qu'est-ce que cela signifie vraiment ?
Il y a deux possibilités, et je ne sais pas laquelle,
-
La connexion est fermée, mais des données sont écrites sur le socket, ce qui crée l'exception ci-dessus. La
0#0
signifie simplement que rien n'a été envoyé car la socket était déjà fermée. -
La connexion est toujours ouverte, et un paquet de zéro octet est envoyé (c'est-à-dire que le code a un bogue) et la fonction
0#0
signifie qu'un paquet de zéro octet tente d'être envoyé.
Qu'en pensez-vous ? Je pense que ce n'est pas concluant, mais peut-être que quelqu'un d'autre a vu ce genre de chose ?