Ich habe einen asynchronen TCP/IP-Client mit Asio. Wenn die Verbindung unterbrochen wird, erhält meine Handle-Funktion von async_read einen Fehler. Ich bin informiert, dass eine Verbindung verloren gegangen ist.Boost Asio: Wie zu überwachen, dass eine TCP-Verbindung ist lebendig
Jetzt refactoring ich einige Legacy-Codes, die einen synchronen TCP/IP-Client implementieren, wo die abstrakte Schnittstelle diese Sequenz erzwingt: ein synchrones Schreiben, dann ein synchrones Lesen. Das mit Asio zu tun ist ziemlich einfach, aber ich würde gerne asynchron wissen, wenn die Verbindung verloren ist.
Gibt es eine elegantere Möglichkeit als:
A Option: hinzufügen einen Thread, wenn der Socket prüft noch am Leben ist (durch zu lesen versuchen ... aber wie kann ich sicher sein, dass die Lese keine Daten von meinem synchronen Lese stehlen Siehe Boost asio ip tcp iostream Error Detection)
Option B: Verwenden async_read statt und und emulieren eine synchrone
lesen
Ich denke, die Antwort ist nein. Vielleicht gibt es jedoch einige plattformspezifische Lösungen. – mirk
Ich glaube nicht, dass das TCP-Protokoll einen Verbindungsfehler erkennen kann, wenn es nicht innerhalb eines bestimmten Zeitrahmens eine Bestätigung an gesendete Pakete empfängt. – Ferruccio
Ich habe Option B implementiert. Aber, es gibt 2 Dinge, die ich nicht verstehe 1. Verbindungsabbrüche werden nicht erkannt und 2. Wenn ich das Ethernetkabel des Servers herausgezogen habe (das ist ein Drucker), kann ich immer noch Daten senden und es gibt keinen Fehler zurück. Nur das zweite Mal, wird es einen Fehler – DoogQc