AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

ReadStream Timeout

Ein Thema von halinchen · begonnen am 16. Jan 2007 · letzter Beitrag vom 16. Jan 2007
Antwort Antwort
Benutzerbild von halinchen
halinchen

Registriert seit: 13. Jun 2006
508 Beiträge
 
Delphi 2007 Professional
 
#1

ReadStream Timeout

  Alt 16. Jan 2007, 15:27
Hi!

Ich hab eine ganz simple Frage, die ich leider selber nicht beantworten kann:
ReadStream ist bei Indy 9 ja so deklariert:

procedure ReadStream(AStream: TStream; AByteCount: LongInt = -1; const AReadUntilDisconnect: boolean = false); Was ist mit einem TimeOut?
Wenn z.B der Client aufhört einen Stream zu schicken (z.B durch Fehler), wann bricht der Server ab? Und wie kann man den Wert ändern?
(in der Hilfe steht bei mir nix dazu)

halinchen
  Mit Zitat antworten Zitat
Der_Unwissende

Registriert seit: 13. Dez 2003
Ort: Berlin
1.756 Beiträge
 
#2

Re: ReadStream Timeout

  Alt 16. Jan 2007, 15:47
Hi,
das Empfangen eines Streams solltest Du bei den Indys als eine Aufgabe eines IO-Handlers sehen. Dieser kennt Methoden um das ganze (gepuffert) für dich zu übernehmen, ob der IOHandler Daten nun an einen Server oder Client weiterreicht ist erstmal egal. Du hast einfach eine Verbindung, einen Sender und einen Empfänger. Daten die vom Sender an den Empfänger geschickt werden nimmt einfach der IOHandler entgegen und schreibt die in einen Stream. Das wird solange gemacht, wie die Verbindung steht und die angegebene Anzahl von Bytes (die erwartet werden) noch nicht gelesen wurde.
Ist hier keine bestimmte Anzahl vorgegeben (-1), so wird erwartet, dass die Anzahl vor den Daten als Integer Wert verschickt wird (man kennt also in jedem Fall die Größe des übertragenen Datums!).

Vielleicht hat es deine Frage schon beantwortet, denn der Grund, dass die Indys hier nicht weiter auf mögliche Timeouts eingehen liegt darin, dass es keine Timeouts für diese Verbindung gibt. Der IOHandler kann auf eine beliebige Verbindung aufgesetzt werden (also jetzt rein theoretisch). Rein praktisch wirst Du ihn wohl zusammen mit dem TCP-Protokoll verwenden. Dieses ist verbindungsorientiert, eine Verbindung wird also aufrechterhalten (oder eben geschlossen). Tritt ein Fehler auf, so kann der sich nur im Schließen der Verbindung äußern und genau der Fall wird vom IOHandler behandelt.
Kommt aus einem bestimmten Grund kein Paket mehr an (TCP bekommt hierüber ja Bestätigungen), so wird einfach die Verbindung als geschlossen angesehen (und die Indy-Komponenten agieren so, als ob die Verbindung geschlossen wurde). Im unfreiwilligen Fall des Schließens bedeutet dies natürlich, dass ein entsprechendes Ereignis (ich denke es müßte ein Fehler sein) ausgelöst wird. Du kannst aber natürlich auch einfach die Verbindung explizit schließen. Beides würde der Empfänger mitbekommen und dem IOHandler mitteilen, der damit seine Arbeit einstellen kann.

Gruß Der Unwissende
  Mit Zitat antworten Zitat
Benutzerbild von halinchen
halinchen

Registriert seit: 13. Jun 2006
508 Beiträge
 
Delphi 2007 Professional
 
#3

Re: ReadStream Timeout

  Alt 16. Jan 2007, 15:56
Aha, danke!

Jetzt hab ichs verstanden! Muss also immer nur gucken ob bei ReadStream ein Fehler auftritt.

Vielen Dank.
  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:06 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