la récupération de “Connection Reset By Peer” Indy TCP Client

Comment dois-je les récupérer dans cette situation?

Le serveur tombe en panne, ainsi que la connexion a été anormalement fermé. Les appels à presque tout résultat dans "Connection Reset By Peer" des exceptions. Il me semble avoir fixé par l'appel de Déconnecter sur le TIdTCPClient objet à l'intérieur de la à l'exception du bloc, mais il en résulte un final d'exception avec le même message (que j'ai pris dans le deuxième essai,-à l'exception de l'îlot).

C'est avec Indy10 et Delphi XE2.

   try
      if not EcomSocket.Connected then EcomSocket.Connect();
    except
      on e: Exception do begin
        try
          EcomSocket.Disconnect();
        except
          MessageDlg('Connectivity to the server has been lost.', mtError, [mbOK], 0);
        end;
      end;
    end;
Avez-vous essayez de déboguer en TIdTCPConnection.Débranchez dans IdTCPConnection.pas? Peut-être un OnDisconnect gestionnaire est exécutée et utilise la connexion. Ou la NotifyPeer joue un rôle à jouer, voir les commentaires dans le source sur différents scénarios
Libérant l'objet et de la création d'une nouvelle aidera (mais n'aide pas à trouver la raison de l'exception)
Je ne suis pas aussi beaucoup d'inquiétude avec laquelle j'obtiens une exception lors de l'appel de la déconnexion. Je veux juste savoir comment bien récupérer à partir d'une situation de ce genre.
C'est difficile à dire sans savoir ce que fait le programme
C'est ce que je considère être pertinents (donc n'hésitez pas à demander pour plus de détails). Le client est notre GUI, qui émet des commandes à un serveur au sein de notre système. Le client doit reconnaître quand la connexion a échoué, et tenter de se reconnecter jusqu'à ce que la connexion a été rétablie. J'ai il fonctionne exactement comme je le veux maintenant. Lorsque le serveur se termine correctement, il appelle DisconnectNotifyPeers, et les connexions sont fermées proprement. Lorsque le serveur s'arrête de façon anormale, les clients auront le reconnaître et d'agir en conséquence. C'est le code qui est le problème. Je vais poster ci-dessous.

OriginalL'auteur Andy Clark | 2012-05-09