Einzelnen Beitrag anzeigen

FoxOne

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

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

  Alt 24. Mai 2007, 17:37
Vielen Dank für die Antwort und die Files!

Nun ist es so, dass ich eigentlich eh dasselbe bei meinem Projekt mache:
Der Client fragt in regelmäßigen Zeitabständen um Daten an, wenn diese Zeit überschritten wird, weiß der Server, dass der Client verblichen ist. Dann wir die oben gepostete Routine 'TerminateConnection' aufgerufen, die den Server aber leider im Deadlock (?) verbleiben läßt.
Den Deadlock kann ich leider nicht so einfach durch ein Zeitlimit ausschließen, weil ich (unter anderem) ReadStream verwende, das anders als Readln keinen Parameter dafür hat.

Ich habe übrigens auch nur Disconnect und DisconnectSocket probiert, das führt aber zum selben Effekt: Man kann sich nicht mehr mit dem Server verbinden. Im Detail: es wird ein neuer Thread erstellt, aber in die OnReceive-Prozedur gelangt man nicht. Auch gar nichts tun bringt nichts, dann wird laufend die Exception 'Socket Error # 10054: connection reset by peer' in OnReceive geworfen (obwohl der Client gar nichts mehr über die unterbrochene Verbindung schicken kann??).


Kurz nach Beenden der Server-Anwendung kommt übrigens die Meldung 'Terminate Thread Timeout'.

Den ganzen Tag hab ich mir schon damit um die Ohren geschlagen, ich bin wirklich für jeden Hinweis dankbar!

Viele Grüße,
Martin
  Mit Zitat antworten Zitat