![]() |
Winsock API disconnect oder Fehler abfangen
Hey,
kann ich mir mit der winsock API irgendwie ein OnError Event basteln so wie es beispielsweise in der TClientSocket Klasse enthalten ist? Gruß Zacherl |
Re: Winsock API disconnect oder Fehler abfangen
In grunde genohmmen schon ... aber dann müsstest du das in Klassen aufbauen sonst würd das nix.
|
Re: Winsock API disconnect oder Fehler abfangen
Geht mir jetzt nicht speziell um ein Event, sondern mehr um die Art und Weise wie ich rausbekommen kann, ob die Verbindung überhaupt noch steht.
Wird mein Server beispielsweise über den Taskmanager abgeschossen, wird nicht ordnungsgemäß "disconnect" aufgerufen und mein Client bekommt gar nichts mit :D |
Re: Winsock API disconnect oder Fehler abfangen
Naja da du einen brauchst Thread prüfst du mit "ioctlsocket" ob was ankommt, sollte in der Zeit der Socket disconnecten gibt die Funktion ein Fehler Code zurück, den wertest du einfach nur aus.
|
Re: Winsock API disconnect oder Fehler abfangen
Danke dir, ich werde das mal versuchen :)
|
Re: Winsock API disconnect oder Fehler abfangen
Hi zacherl,
imho ist es so, dass eine Socket-Verbindung nicht automatisch prüft, ob der verbundene Teilnehmer noch aktiv ist. Besteht eine connection, so gehen alle Teilnehmer davon aus, dass diese auch aktiv ist. Eine aktive Benachrichtigung des Beendens erfolgt nur über den disconnect. Stürzt ein Teilnehmer ohne disconnect ab, so werden alle anderen hiervon nicht informiert. Ich habe dieses Problem über ein eigenes Benachrichtigungsprotokoll (ähnlich Ping) gelöst. Hast du nicht die Möglichkeit so etwas zu implementieren, besteht zusätzlich die Einrichtung eines Timeout. Bekommt eine Socket eine festgelegte Zeiteinheit keine Daten (Timeoutzeit), wird die Verbindung aktiv getrennt. Ich muß aber auch zugeben, dass ich mit ioctlsocket noch nicht gearbeitet habe. Gruß oki |
Re: Winsock API disconnect oder Fehler abfangen
Ich hatte es mal so gelöst, dass ich einfach immer nach einiger Zeit irgendwelche Müll Daten versucht habe zu schicken und wenn das Socket einen Fehlercode zurückgegeben hat, wusste ich, dass die Verbindung abgebrochen ist. Allerdings hat das meinen regulären Datenverkehr gestört und war zudem noch recht instabil ..
Ich werde es später, wenn ich zu Hause bin erstmal mit ioctlsocket versuchen. |
Re: Winsock API disconnect oder Fehler abfangen
Zitat:
Das heisst also, der Server wartet auf ein connect und trennt bei Inaktivität. Der Client macht das gleiche, versucht aber nach Disconnect eine neue Verbindung zu etablieren. Gruß oki |
Re: Winsock API disconnect oder Fehler abfangen
Jaja, ich glaube wir reden aneinander vorbei :D Meine Erfahrungen haben das selbe gezeigt. Ich meine nur einen Lösungsansatz von mir, in welchem ich zwar keine richtige PING PONG Funktion eingebaut hatte, sondern ich habe einfach versucht irgendwas an den Server zu schicken.
In diesem Falle hat der Client aber gemerkt, wenn der Server geschlossen wurde und einen Errorcode zurückgegeben. Dies allerdings erst im Falle eines Datentransfers. Von alleine kommt überhaupt keine Fehlermeldung. Um 7 bin ich ca wieder zu Hause, dann sehe ich mir mal die ioctlsocket API an und erstatte Rückmeldung :) |
Re: Winsock API disconnect oder Fehler abfangen
Habe jetzt folgendes versucht:
Delphi-Quellcode:
Das liefert mir allerdings auch keinen Fehler, wenn der Server abgeschossen wurde.
IOCtlSocket(FSocket, FIONREAD, dwSize)
|
Alle Zeitangaben in WEZ +1. Es ist jetzt 05:53 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