AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Netzwerke Delphi Read Timeout bei Delphi 2007 mit Indy 10
Thema durchsuchen
Ansicht
Themen-Optionen

Read Timeout bei Delphi 2007 mit Indy 10

Ein Thema von peterlepan · begonnen am 12. Jun 2007 · letzter Beitrag vom 12. Aug 2008
Antwort Antwort
peterlepan

Registriert seit: 5. Jun 2006
Ort: Nordhausen
37 Beiträge
 
Delphi 10.2 Tokyo Professional
 
#1

Read Timeout bei Delphi 2007 mit Indy 10

  Alt 12. Jun 2007, 20:59
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
Peter Tabatt
  Mit Zitat antworten Zitat
Thomas Horstmann

Registriert seit: 25. Apr 2007
86 Beiträge
 
Delphi 10.3 Rio
 
#2

Re: Read Timeout bei Delphi 2007 mit Indy 10

  Alt 12. Jun 2007, 21:18
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;
  Mit Zitat antworten Zitat
peterlepan

Registriert seit: 5. Jun 2006
Ort: Nordhausen
37 Beiträge
 
Delphi 10.2 Tokyo Professional
 
#3

Re: Read Timeout bei Delphi 2007 mit Indy 10

  Alt 12. Jun 2007, 23:10
Hallo Thomas!

Danke für den Tip, funktioniert prima!

Gruß

Peter
Peter Tabatt
  Mit Zitat antworten Zitat
delphin06

Registriert seit: 18. Jun 2006
154 Beiträge
 
#4

Re: Read Timeout bei Delphi 2007 mit Indy 10

  Alt 16. Jun 2007, 17:08
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!
  Mit Zitat antworten Zitat
Pif

Registriert seit: 7. Feb 2008
16 Beiträge
 
#5

Re: Read Timeout bei Delphi 2007 mit Indy 10

  Alt 12. Aug 2008, 00:13
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 http://indy.fulgan.com unterzogen.
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
  Mit Zitat antworten Zitat
Antwort Antwort


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 02:48 Uhr.
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz