AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Netzwerke Delphi Indy TCP-Anwendung: Wie eine tote Verbindung loswerden?
Thema durchsuchen
Ansicht
Themen-Optionen

Indy TCP-Anwendung: Wie eine tote Verbindung loswerden?

Ein Thema von FoxOne · begonnen am 24. Mai 2007 · letzter Beitrag vom 25. Mai 2007
 
FoxOne

Registriert seit: 24. Mai 2007
Ort: Wien
7 Beiträge
 
#6

Re: Indy TCP-Anwendung: Wie eine tote Verbindung loswerden?

  Alt 25. Mai 2007, 15:52
Vielen Dank für die Antwort!

Habe inzwischen weiter herumprobiert und kann bestätigen, dass der Socket den Thread ordentlich wegputzt, wenn eine bestimmte Zeit verstrichten ist (irgendein Timeout von ca. 30s, ich weiß nicht, wie bzw. wo der zu setzen ist). Es wird dann die bereits erwähnte Exception 'Connection reset by peer' geworfen.
Bei meinen Internetrecherchen bin ich auf den Tip gestoßen, diese Exception nocheinmal anzustoßen, weil sie Indy intern noch verwertet, also:
Delphi-Quellcode:

uses ....,IdException;

procedure TForm1.IdTCPServer1Execute(AThread: TIdPeerThread);
begin

  try

  //--- Server Arbeit hier
  //..
  //..

  except
    on e: EIdSocketError do
    begin //-- Indy exception
        ErrorOut('Socket Exception in OnExecute: ' + e.message);
        Raise; //--- wichtig!
    end;

    on e: exception do
    begin //-- andere exception
        ErrorOut('Exception in MyOnReceive: ' + e.message);
        Raise; //--- wichtig?

    end;
  end;

end;

Dies hat soweit geholfen, dass die Exception nun nur mehr einmal kommt. Wenn ich mir vor dem Timeout und danach die Threadliste anschaue, dann ist nachher der 'tote' Thread tatsächlich weg.
Beim erneuten starten des Clients wird dann die Verbindung soweit aufgebaut, dass ein neuer TidPeerThread in der Threadliste ist, aber leider wird nun die OnExecute-Prozedur des Servers nicht mehr aufgerufen. Somit hängt Client-Server-Verbindung, aber eben nur in etwa 50% der Fälle bei langsamer Verbindung. Der Rest der Server-Applikation (Datenerfassung etc.) läuft ungestört weiter. Beim Beenden des Servers kommt dann wenig überraschen die Exception 'Terminate Thread Timeout'.

Habe inzwischen auch einen OnListenException-Handler implementiert, der springt aber nicht an.

Ich bin also weiterhin ratlos. Wie kann ich den Server wieder freibekommen?
  Mit Zitat antworten Zitat
 


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 07:53 Uhr.
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz