AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Netzwerke TIDTCPIPClient.Connect ohne exception abbrechen
Thema durchsuchen
Ansicht
Themen-Optionen

TIDTCPIPClient.Connect ohne exception abbrechen

Ein Thema von QuickAndDirty · begonnen am 10. Mär 2025 · letzter Beitrag vom 13. Mär 2025
Antwort Antwort
mjustin

Registriert seit: 14. Apr 2008
3.010 Beiträge
 
Delphi 2009 Professional
 
#1

AW: TIDTCPIPClient.Connect ohne exception abbrechen

  Alt 10. Mär 2025, 16:32
So baue ich moment eine TCP Verbindung auf .
Ich würde das Verbinden gerne abbrechen können, daher diese Konstruktion.
In diesem Fall würde ich ein kleines ConnectTimeout setzen (z.B. 5 Sekunden), und dann Connect aufrufen bis die Verbindung erfolgreich war, oder die maximal Anzahl Verbindungsabbrüche erreicht ist. Defaultmäßig wartet Indy länger.

Exceptions haben hier den Vorteil, dass sie nicht so leicht übersehen können wie ein Rückgabewert und zudem auch noch Informationen zum Fehler liefern können. D.h. ob der Server überhaupt lokalisiert werden konnte ('No route to host') oder er die Verbindung verweigert hat ('Connection refused').
Michael Justin
  Mit Zitat antworten Zitat
Benutzerbild von jaenicke
jaenicke

Registriert seit: 10. Jun 2003
Ort: Berlin
9.976 Beiträge
 
Delphi 12 Athens
 
#2

AW: TIDTCPIPClient.Connect ohne exception abbrechen

  Alt 10. Mär 2025, 19:55
Es gibt verschiedene Timeouts, die eine Rolle spielen. Verbindung, lesen, schreiben, auf Socketebene, ... unter anderem:
Delphi-Quellcode:
uses
  IdStackConsts;

procedure SetClientTimeouts(AClient: TIdTCPClient);
begin
  AClient.ConnectTimeout := 5000;
  AClient.ReadTimeout := 5000;
  AClient.Socket.Binding.SetSockOpt(Id_SOL_SOCKET, Id_SO_RCVTIMEO, 5000);
  AClient.Socket.Binding.SetSockOpt(Id_SOL_SOCKET, Id_SO_SNDTIMEO, 5000);
end;
Sebastian Jänicke
AppCentral
  Mit Zitat antworten Zitat
DelTurbo

Registriert seit: 12. Dez 2009
Ort: Eifel
1.245 Beiträge
 
Delphi 2007 Architect
 
#3

AW: TIDTCPIPClient.Connect ohne exception abbrechen

  Alt 11. Mär 2025, 13:17
Hi, kurz mal offtopic. Ich bin auch zu ICS gewechselt wenn es nur um Windows geht. Ansonsten halt Synapse wenn es Unix sein soll. Indy hat den nachteil das es mit altem OpenSSL abreitet.

HTTPS Clients sind schnell gemacht. Aber bei beiden bekomme ich den beim FTPClient den Datachanel nicht Protected.
Alle meine Rechtschreibfehler sind Urheberrechtlich geschützt!!
  Mit Zitat antworten Zitat
QuickAndDirty

Registriert seit: 13. Jan 2004
Ort: Hamm(Westf)
2.020 Beiträge
 
Delphi 12 Athens
 
#4

AW: TIDTCPIPClient.Connect ohne exception abbrechen

  Alt 12. Mär 2025, 10:35
Hi, kurz mal offtopic. Ich bin auch zu ICS gewechselt wenn es nur um Windows geht. Ansonsten halt Synapse wenn es Unix sein soll. Indy hat den nachteil das es mit altem OpenSSL abreitet.

HTTPS Clients sind schnell gemacht. Aber bei beiden bekomme ich den beim FTPClient den Datachanel nicht Protected.
Es muss jetzt auf Windows, Android und IOs laufen und in absehbarer Zeit (scaleing) auf Linux.

Ich wünschte einfach nur Abbrechbarkeit und das Statusänderungen nicht durch Exceptions mitgeteilt werden.


Ist ok wenn es nicht geht... dann weine ich einfach vor mich hin und lebe mit der Krücke und den EIDTimoutExceptions...die ich wohl aus dem Debugger ausbauen muss.
Andreas
Monads? Wtf are Monads?

Geändert von QuickAndDirty (12. Mär 2025 um 10:39 Uhr)
  Mit Zitat antworten Zitat
DelTurbo

Registriert seit: 12. Dez 2009
Ort: Eifel
1.245 Beiträge
 
Delphi 2007 Architect
 
#5

AW: TIDTCPIPClient.Connect ohne exception abbrechen

  Alt 13. Mär 2025, 10:09
Dann würde ich Synapse empfehlen. Und zwar von hier, das kann auch mir SSL 1.1 und 3.x umgehen.
Alle meine Rechtschreibfehler sind Urheberrechtlich geschützt!!
  Mit Zitat antworten Zitat
QuickAndDirty

Registriert seit: 13. Jan 2004
Ort: Hamm(Westf)
2.020 Beiträge
 
Delphi 12 Athens
 
#6

AW: TIDTCPIPClient.Connect ohne exception abbrechen

  Alt 12. Mär 2025, 10:31
Es gibt verschiedene Timeouts, die eine Rolle spielen. Verbindung, lesen, schreiben, auf Socketebene, ... unter anderem:
Delphi-Quellcode:
uses
  IdStackConsts;

procedure SetClientTimeouts(AClient: TIdTCPClient);
begin
  AClient.ConnectTimeout := 5000;
  AClient.ReadTimeout := 5000;
  AClient.Socket.Binding.SetSockOpt(Id_SOL_SOCKET, Id_SO_RCVTIMEO, 5000); // <----Was machen diese beiden Zeilen?
  AClient.Socket.Binding.SetSockOpt(Id_SOL_SOCKET, Id_SO_SNDTIMEO, 5000); // <----Was machen diese beiden Zeilen?
end;
Was machen die beiden Zeilen?
Andreas
Monads? Wtf are Monads?
  Mit Zitat antworten Zitat
Benutzerbild von jaenicke
jaenicke

Registriert seit: 10. Jun 2003
Ort: Berlin
9.976 Beiträge
 
Delphi 12 Athens
 
#7

AW: TIDTCPIPClient.Connect ohne exception abbrechen

  Alt 13. Mär 2025, 11:25
Was machen die beiden Zeilen?
Die setzen die Timeouts auf lowlevel Socketebene. Aber wenn das nicht nur unter Windows laufen soll, ist das der falsche Weg. Dann ist Indy aktuell ohnehin keine gute Idee, weil die veralteten OpenSSL Bibliotheken schon unter Windows ärgerlich sind, aber unter Android usw. noch schlechter sind.
Sebastian Jänicke
AppCentral
  Mit Zitat antworten Zitat
QuickAndDirty

Registriert seit: 13. Jan 2004
Ort: Hamm(Westf)
2.020 Beiträge
 
Delphi 12 Athens
 
#8

AW: TIDTCPIPClient.Connect ohne exception abbrechen

  Alt 12. Mär 2025, 10:29
In diesem Fall würde ich ein kleines ConnectTimeout setzen (z.B. 5 Sekunden), und dann Connect aufrufen bis die Verbindung erfolgreich war, oder die maximal Anzahl Verbindungsabbrüche erreicht ist. Defaultmäßig wartet Indy länger.
Ja genau so mache ich das ja.
Ich würde es nur gerne direkt abbrechen können ohne Exception oder Timeouten ohne Exception...ich mag dies art von controllflow nicht, einen Fehler zu werfen wo keiner ist.
Andreas
Monads? Wtf are Monads?
  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 10:47 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