Die zuverlässige Methode zur Erkennung von Verbindungsabbrüchen besteht darin, eine Nachricht vom Typ "null/ping/echo" in das Protokoll auf Anwendungsebene zu schreiben und von Ihrer Anwendung in regelmäßigen Abständen senden zu lassen. Wenn es keine zeitnahe Antwort erhält, kann davon ausgegangen werden, dass die Verbindung unterbrochen wurde. Die meisten Protokolle, die langlebige Verbindungen beinhalten sollen, beinhalten eine solche Nachricht (zum Beispiel IRC, IMAP und SSH).
(Immerhin, auch wenn Sie blank TCP ACK-Nachrichten senden konnten, muss das andere Ende nicht antworten, da es keine Daten mehr an ACK selbst erhalten hat).
Sie aus einer Anwendung bedeutet nicht, oder Sie beziehen sich nur auf den Betrieb des TCP-Stack? – EJP
In der Tat möchte ich die TCP-Trennung erkennen. Da Solaris 10 die Option Tcp keep alive nicht unterstützt, möchte ich einen anderen Weg finden; vielleicht wird eine Funktion wie get_socket_status (kein Systemaufruf) ein Ack-Paket senden und den Verbindungsstatus zurückgeben. –
Das würde nicht helfen. Das Keep Alive ACK funktioniert, weil es für die 'falsche' Sequenznummer ist, also provoziert es eine Antwort mit dem korrekten aktuellen Seqno. Laut meiner Antwort gibt es keinerlei API, die nur ein ACK sendet. Und es gibt keine API, die eine Trennung außer Lesen und Schreiben erkennt. – EJP