![]() |
Read Timeout bei Delphi 2007 mit Indy 10
Hallo!
Bei einer kleinen HTTP-SSL-Anwendung mit Delphi 2007 und den Indy 10 Komponenten habe ich das Problem, dass ich nach dem Ausführen eines Get oder Post einen Read Timeout zurückbekomme, also eine Exception. Zum Testen habe ich auch das SSL-Beispielprogramm der Indy-komponenten verwendet, dieses brachte in Delphi 7 mit Indy 9 den oben genannten Fehler nicht, wohl aber bei den nachfolgenden Delphi-Versionen mit Indy 10. Änderungen am Timeout-Parameter der Indy-Komponenten brachten auch keine Abhilfe. Meine Frage ist nun, wie kann man entweder den Fehler umgehen oder in Delphi 2007 auf die Indy 9 Komponenten wechseln, ohne alles noch mal neu zu installieren. Peter Tabatt |
Re: Read Timeout bei Delphi 2007 mit Indy 10
Hallo,
ich hatte ein ähnliches Problem mit SSL. Der Timeout Fehler wurde ausgelöst, auch wenn keine Zeit eingetragen wurde (-1). Daraufhin habe ich folgendes in Indy angepasst (siehe Code): Datei : ...Indy_10\Protocols\IdSSLOpenSSL.pas Function : TIdSSLIOHandlerSocketOpenSSL.ReadFromSource Zeile : 1394 In den Suchpfad sollten die Indy Verzeichnisse eingebaut werden z.B.: C:\Programme\Borland\BDS\4.0\source\Indy10\Core C:\Programme\Borland\BDS\4.0\source\Indy10\Protoco ls Seitdem klappt es. Hoffe es hilft. Viele Grüsse Thomas
Delphi-Quellcode:
...
function TIdSSLIOHandlerSocketOpenSSL.ReadFromSource( ARaiseExceptionIfDisconnected: Boolean; ATimeout: Integer; ARaiseExceptionOnTimeout: Boolean): Integer; // Reads any data in tcp/ip buffer and puts it into Indy buffer // This must be the ONLY raw read from Winsock routine // This must be the ONLY call to RECV - all data goes thru this method var LByteCount: Integer; LBuffer: TIdBytes; LLastError: Integer; begin if ATimeout = IdTimeoutDefault then begin if ReadTimeOut = 0 then begin ATimeout := IdTimeoutInfinite; end else begin ATimeout := FReadTimeout; end; end; Result := 0; // Check here as this side may have closed the socket CheckForDisconnect(ARaiseExceptionIfDisconnected); if BindingAllocated then begin LByteCount := 0; repeat // ***************************************************************** // *** Anpassung, Eingefügt *** // *** Timeout wird auch bei ATimeOut = -1 ausgelöst. *** // ***************************************************************** if Readable(ATimeout) or (ATimeOut = -1) then begin // ***************************************************************** // *** Anpassung, Deaktiviert (Original) *** // ***************************************************************** // if Readable(ATimeout) then begin // ***************************************************************** // *** Anpassung, Ende *** // ***************************************************************** if Assigned(FRecvBuffer) then begin // No need to call AntiFreeze, the Readable does that. if BindingAllocated then begin SetLength(LBuffer,RecvBufferSize); try LByteCount := Recv(LBuffer); SetLength(LBuffer,LByteCount); if Intercept <> nil then begin Intercept.Receive(LBuffer); LByteCount := Length(LBuffer); end; FRecvBuffer.Write(LBuffer); // WriteBuffer(LBuffer^,LByteCount); finally SetLength(LBuffer,0); end; end else begin raise EIdClosedSocket.Create(RSStatusDisconnected); end; end else begin LByteCount := 0; if ARaiseExceptionIfDisconnected then raise EIdException.Create(RSNotConnected); end; FClosedGracefully := LByteCount = 0; |
Re: Read Timeout bei Delphi 2007 mit Indy 10
Hallo Thomas!
Danke für den Tip, funktioniert prima! Gruß Peter |
Re: Read Timeout bei Delphi 2007 mit Indy 10
Ich hab gar kein Verzeichnis Indy10 im Source Ordner! Wenn ich über Delphi versuche auf den code von IdSSLOpenSSL.pas zuzugreifen, sagt der mir wurde nicht gefunden! Ich hab nur die vorcompilierten dateien davon.
Weiß jemand wo ich den source für die aktuelle Indy 10 version herbekomme? Nach dem Update ist dieses Problem mit dem timeout immer noch nicht weg! |
Re: Read Timeout bei Delphi 2007 mit Indy 10
Hab das Problem auch, hab gegoogelt etc finde aber keine Lösung.
Erst habe ich die oben genannte Datei auch nicht gefunden. Dann habe ich meine Indy 10 nochmal einem Update von ![]() Dort habe ich auch die besagte Datei gefunden, jedoch gibt es in der Zeile die Angegebne Funtion nicht, die ganze Datei enthält nichts davon. Weiß jemand eine lösung? MfG |
Alle Zeitangaben in WEZ +1. Es ist jetzt 10:55 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