Einzelnen Beitrag anzeigen

Benutzerbild von sx2008
sx2008

Registriert seit: 16. Feb 2008
Ort: Baden-Württemberg
2.332 Beiträge
 
Delphi 2007 Professional
 
#8

Re: IdIrc feststellen ob die verbindung noch da ist

  Alt 9. Jan 2010, 15:10
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.
fork me on Github
  Mit Zitat antworten Zitat