Zitat von
Astat:
und wenn das Netzwerkkabel gezogen wird, wird der zugehörige Socket sofort
darüber benachrichtigt, dass die Verbindung unterbrochen wurde.
Die Frage ist nur, ob das auch die
Indy-Komponente mitbekommt.
Bei meinen Experimenten mit der ScktComp-
Unit gab es keine Reaktion auf das Abziehen des Kabels.
Zitat von
Astat:
Für diesen Zwecke kann man dem Socket sagen, dass dieser ein Keepallive verwenden soll.
setsockopt(ASocket, SOL_SOCKET, SO_keepalive, @bKeepAllive, SizeOf(bKeepAllive))
Das ist natürlich auch eine Möglichkeit.
Dann wird aber der Systemdefault von 2 Stunden verwendet; d.h. 2 Stunden nachdem das letzte Datenpaket über die Verbindung geschickt wurde, werden automatisch Keep-Alive Pakete gesendet.
Über die Funktion WSAIoctl() kann man den Timeout ändern aber dann begibt man sich in die tieferen Bereiche von WinSock,
wo man sich eigentlich nicht die Finger schmutzig machen möchte.
Ausserdem sollte man dann auch mit einem Netzwerksniffer überprüfen, ob auch wirklich KeepAlive-Pakete gesendet werden.
Und zum Schluss bleibt noch die Frage, ob die
Indy-Komponenten den fehlgeschlagenen KeepAlive Versuch mitbekommen.
Falls es funktioniert wäre das natürlich schön denn man braucht auf Applikationsebene und im Protokoll nichts tun.
Falls es nicht klappt, kommt man auf der Anwendungsschicht einfacher zum Ziel.