![]() |
TSocketConnection hängt, wenn man Netzwerkkabel entfernt...
Na ja, irgendwie logisch, das das nicht gut geht.... Aber das Teil hängt einfach, anstatt irgendwann mit einem Error zurück zu kehren. Ich warte ca. 5 Minuten.... Ist das ein Bug oder ist das ein Feature?
Muss man damit leben, das TCP/IP sich u.U. einfach aufhängt? Oder ist das eine Macke der SocketConnection. Hat jemand Erfahrungen damit? Die Geschichte geht so: Wir haben eine nette 3-Tier-Anwendung. Fremdprogrammierer sollen nun auf die Mittelschicht zugreifen. Da z.B. VB keine Socketconnection kennt, habe ich einen DLL-Wrapper geschrieben. Einer der Programmierer verlangt nun (zu Recht), das die DLL absolut bullet-proof ist, und max. 10 Sekunden warten soll (Die normale Response-Zeit liegt bei 200-500ms). Na ja, kann man über Threads lösen, oder gibt es auch einen richtigen Weg? Um die SocketConnection komme ich derzeit nicht herum, obwohl mittelfristig auch eine andere Lösung in Frage käme... Ick hab ich heut sowat von blamiert, als ich die DLL demonstriert habe, und dieser Sack (netter Kerl und echt fähig) dann das Netzwerkkabel rausnahm und sagt: Typischer GAU... Und nu?.... Alter Schwede :oops: |
Re: TSocketConnection hängt, wenn man Netzwerkkabel entfernt
*push*
|
Re: TSocketConnection hängt, wenn man Netzwerkkabel entfernt
Zitat:
|
Re: TSocketConnection hängt, wenn man Netzwerkkabel entfernt
Zitat:
Gruß, Dj_Base |
AW: TSocketConnection hängt, wenn man Netzwerkkabel entfernt...
Ich greife das Thema wieder auf, nutze Delphi2010 mit TSocketConnection und habe gemau das selbe Problem! Gibt es dazu eine Lösung?
Das Programm hängt sich bei Connection.Connected := False auf. |
AW: TSocketConnection hängt, wenn man Netzwerkkabel entfernt...
Kann man mit einem Netzwerkmonitor die Verbindung noch sehen (netstat, TCPView...)?
Der Default-Timeout des Betriebssystems könnte so hoch sein dass die Fehlermeldung erst nach längerer Zeit erscheint. Ich habe aktuell keinen Link zu einem technischen Artikel, aber man kann ihn entweder systemweit abfragen oder setzen. Ferner würde ich einfach mal den Debugger anwerfen und in Detail nachverfolgen, wo das Programm hängt. Passender Stack Overflow Artikel: ![]() |
AW: TSocketConnection hängt, wenn man Netzwerkkabel entfernt...
Das Programm läuft noch aber er hängt eben bei connection := False. Auch wenn ich connection.Free oder Clientdataset.close hängt es. Ich kann da nichts weiter debuggen, ich komme da nur in das CPU Fenster.
Kmischerweise bei einen anderen Programm mit der selben Verbindung dort schiebe ich aber weniger Daten hin und her.
Code:
try
if SocketConnection.Connected then begin SocketConnection.Connected := False; Clientdataset.open; end; except SocketConnection.Connected := False; Clientdataset.close; end; |
AW: TSocketConnection hängt, wenn man Netzwerkkabel entfernt...
Zitat:
p.s. eventuell muss die MidasLib Unit anstatt MIDAS.DLL eingebunden werden. |
AW: TSocketConnection hängt, wenn man Netzwerkkabel entfernt...
Code:
Später dann im assembler Code(Unit System) schmeißt es ihm hm... das ist leider schon zu tief unten. Darin sehe ich keine lösung.
procedure TDispatchConnection.DoDisconnect;
begin if not VarIsNull(AppServer) then SetAppServer(NULL); end; Witzigerweise hat er es einmal korrekt gemacht. War wohl zufall. |
AW: TSocketConnection hängt, wenn man Netzwerkkabel entfernt...
Zitat:
|
AW: TSocketConnection hängt, wenn man Netzwerkkabel entfernt...
Was bringt mir das? Sollte ich jetzt Delphi umprogrammieren?
|
AW: TSocketConnection hängt, wenn man Netzwerkkabel entfernt...
Zitat:
(Da so etwas auch daneben gehen kann, würde ich es vermeiden, und Experimente nur nach einer Datensicherung machen). Man kann natürlich auch einen Bugreport erstellen, falls noch keiner zu diesem Problem existiert. Falls einer existiert, enthält er eventuell weitere Hinweise oder Workarounds. |
AW: TSocketConnection hängt, wenn man Netzwerkkabel entfernt...
Ich habe den Client unter Delphi XE10 getestet und das selbe Problem tritt auf. Also eine neuee Indy-Version(Delphi 10 hat mit sicherheit eine neue Indy Version) hilft leider nicht.
Auch das setzen eines Timeouts bringt leider nichts:
Code:
Es reicht auch die Netzwerkverbindung zu deaktivieren im Windows.SocketConnection.ReadTimeout := 100; SocketConnection.ConnectTimeout := 100; |
Alle Zeitangaben in WEZ +1. Es ist jetzt 04:41 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