Klassiker ist z.B. bei http, wenn noch eine Antwort gesendet werden soll, aber die andere Seite nicht mehr "zuhört".
Dafür gibt es in den Debuggeroptionen (Tools --> Optionen --> Debugger-Optionen --> E,barcadero-Debugger --> Sprach-Exceptions) bereits den Eintrag "
Indy Stille Exceptions". Wenn du den Haken setzt oder EIdSilentException dort hinzufügst, bekommst du diese intern zur Benachrichtigung verwendeten Exceptions nicht mehr in der
IDE angezeigt.
Jepp, das ist bei mir auch schon seit langem aktiviert (oder ist das mittlerweile sogar Standard?). Aber guter Hinweis auf jeden Fall, ich hätte es auch nicht mehr direkt auf dem Schirm gehabt, dass es die "SilentExceptions" gibt.
Ich finde die Stelle auf die Schnelle gerade nicht, aber wenn ich mich recht entsinne, dann steht in dem Quellcode sogar sowas wie "die
Exception hier kann man eigentlich meistens ignorieren"
Unit IdIOHandler --> TIdIOHandler.RaiseConnClosedGracefully
Genau die Stelle meinte ich.
Und die zeigt auch ziemlich gut das Problem (vielleicht auch das vom Fragesteller): da steht ja letztlich "wenn du ein Server bist, dann kannst du das hier ignorieren, wenn du ein Client bist, dann solltest du dich kümmern". Blöd ist dann, wenn man sowohl Client- als auch Server-Software schreibt, denn die
IDE-Konfig ist ja nicht Projekt-Abhängig. Klar, man könnte auch wollen, dass diese
Exception-Ausnahmen irgendwie pro Projekt definiert werden können, aber wenn
Indy schon so ausschweifend mit Exceptions umgeht und an der Stelle sogar einen langen Kommentar im Code hat, dann baut doch wenigstens eine Möglichkeit ein, zu sagen "ich bin ein Server, lass mich in Ruhe".
und ich denke mir immer: "ja, warum werft ihr sie dann?!".
Weil sie intern den Programmablauf steuern. Die Alternative wäre, dass man entsprechende Rückgaben einbaut, die dann geprüft werden usw., aber dadurch würde es viel mehr Ablaufsteuerungscode geben, so dass der Quelltext unübersichtlicher würde.
Ich habe Exceptions auch schon so genutzt. Das hat Vor- und Nachteile.
Hm, joa. Finde ich schwierig, aber müssen wir jetzt nicht im Detail diskutieren. Ich kann mir auch vorstellen, dass man, wenn Netzwerk-Bibliotheken schreibt, eh mit vielen "echten" Exceptions zu tun hat, weil es nun mal viele Stellen gibt, an denen etwas schiefgehen kann, weil irgendeine Gegenseite nicht so reagiert wie sie sollte. Wenn man dann eh "im Thema" ist, nimmt man sie vielleicht auch eher an den Stellen, wo es nicht unbedingt die beste Lösung wäre.