Frage

Was ist der einfachste Weg, um zu überprüfen, ob eine Buchse auf der Remote-Seite der Verbindung geschlossen wurde? socket::is_open() gibt true zurück, auch wenn es auf der Remote-Seite geschlossen ist (ich verwende boost::asio::ip::tcp::socket).

Ich könnte versuchen, aus dem Stream zu lesen und sehen, ob es gelingt, aber ich muß die Logik meines Programms ändern, um es auf diese Weise funktioniert (ich will nicht Daten aus dem Stream an dem Punkt extrahiert werden die Kontrolle).

War es hilfreich?

Lösung

Wenn die Verbindung wurde vom Peer sauber geschlossen sollten Sie ein EOF erhalten beim Lesen. Ansonsten ich in der Regel ping, um herauszufinden, ob die Verbindung wirklich lebendig ist.

Andere Tipps

Just überprüfen boost::asio::error::eof Fehler in Ihrem async_receive Handler. Es bedeutet, dass die Verbindung geschlossen wurde. Das ist der einzige richtige Weg, dies zu tun.

Sie haben einen Schub Peek-Funktion zur Verfügung? Die meisten Socket-Implementierungen haben eine Möglichkeit, Daten zu lesen, ohne es aus der Warteschlange entfernt, so dass Sie es später noch einmal lesen. Dies scheint Ihre Anforderungen zu erfüllen.

Nach schnell durch die Asio docs blickte, war ich nicht in der Lage, genau das zu finden, was ich erwartet hatte, aber das bedeutet nicht, es ist nicht da.

Ich würde dies vorschlagen für den Anfang.

Ich denke, dass in der Regel, wenn Sie einen Socket öffnen, sollten Sie beginnen, es zu lesen und inmediately nie so tun zu stoppen. Auf diese Weise können Sie Ihren Server oder Client unterstützen sowohl synchrone als auch asynchrone Protokolle machen. In dem Moment, schließt der Client die Verbindung, den Moment der Lese diese wird Ihnen sagen.

error_code Verwendung ist in der Lage, den Zustand zu überprüfen, ob der Client verbunden ist oder nicht. Wenn die Verbindung erfolgreich ist, wird die error_code error.value () 0 zurück, sonst anderen Wert zurück. Sie können auch die Nachricht überprüfen () aus der error_code.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top