Hallo Entwicklergemeinde!
Ich habe ein kleines, unschönes Problem mit der Indy TCPClient-Komponente! Die Komponente TIdTCPClient ist bei mir an einer TIdIOHandlerStack-Komponente gebunden. Ich verwende drei solcher Client-IOHandlerStack Komponentenverbindungen, welche ich nacheinander initialisiere und öffne. Sind die drei zu bindenden Host vorhanden wird alles schön sauber gebunden. Ich löse die Verbindungen zu einem späteren Zeitpunkt. Das Timeout für den Verbindungsversuch habe ich auf 1000 (ms) gesetzt. Bei der ersten Clientverbindung wird das auch sauber umgesetzt: Server nicht da --> 1000 ms Wartezeit --> Exception wird ausgelöst
Problem:
Die Clients 2 & 3 welche direkt im Anschluss gebunden werden sollen, benötogen für das Auslösen der Exception ca. 30s !! Beim Debuggen ist mir aufgefallen, dass in der Indy-Unit 'IdIOHandlerStack' eine Prozedur 'ConnectClient' und darin eine eingebundene Prozedur 'DoConnectTimeout()' existiert. In der DoConnectTimeout() wird durch den Aufruf von 'WaitFor()' versucht, das hResult des beendeten Threads zu ermitteln. Und da liegt der Hund begraben! Erst nach ca. 30s melden die Threads anscheinend Ihr Ende, denn so lange dauert es bis die Funktion zurückkehrt.
Muss ich stattdessen mit einer Client-Komponente arbeiten und diese erst wieder freigeben um Sie mit dem zweiten Host zu verbinden? Wenn die Hosts alle da sind gibt es keinerlei Problem mit Wartezeiten.
Ich hoffe das Problem ist halbwegs klar geworden!
Danke für jede Antwort!
Gruß
Carsten
Ich habe ein kleines, unschönes Problem mit der Indy TCPClient-Komponente! Die Komponente TIdTCPClient ist bei mir an einer TIdIOHandlerStack-Komponente gebunden. Ich verwende drei solcher Client-IOHandlerStack Komponentenverbindungen, welche ich nacheinander initialisiere und öffne. Sind die drei zu bindenden Host vorhanden wird alles schön sauber gebunden. Ich löse die Verbindungen zu einem späteren Zeitpunkt. Das Timeout für den Verbindungsversuch habe ich auf 1000 (ms) gesetzt. Bei der ersten Clientverbindung wird das auch sauber umgesetzt: Server nicht da --> 1000 ms Wartezeit --> Exception wird ausgelöst
Problem:
Die Clients 2 & 3 welche direkt im Anschluss gebunden werden sollen, benötogen für das Auslösen der Exception ca. 30s !! Beim Debuggen ist mir aufgefallen, dass in der Indy-Unit 'IdIOHandlerStack' eine Prozedur 'ConnectClient' und darin eine eingebundene Prozedur 'DoConnectTimeout()' existiert. In der DoConnectTimeout() wird durch den Aufruf von 'WaitFor()' versucht, das hResult des beendeten Threads zu ermitteln. Und da liegt der Hund begraben! Erst nach ca. 30s melden die Threads anscheinend Ihr Ende, denn so lange dauert es bis die Funktion zurückkehrt.
Muss ich stattdessen mit einer Client-Komponente arbeiten und diese erst wieder freigeben um Sie mit dem zweiten Host zu verbinden? Wenn die Hosts alle da sind gibt es keinerlei Problem mit Wartezeiten.
Ich hoffe das Problem ist halbwegs klar geworden!
Danke für jede Antwort!
Gruß
Carsten
Comment