Das ist wirklich auf Ihrer Wahl des Protokolls abhängt.
einfachen Befehl Protokoll
Wenn Ihr Server-Protokoll wartet immer auf eine Nachricht von dem Client, werden Sie immer eine anhängige async_read
für jeden Kunden verbunden haben. Dies sollte mit einem Fehler (EOF) zurückgegeben werden, wenn ein Client in irgendeiner Weise trennt.
Keep-Alive ist ein Ansatz wie oben erwähnt, aber ausstehende async_read
Arbeit ist gut für diesen Zweck.
einfaches Ereignis-Protokoll
Ein einfaches Ereignis-Protokoll beinhaltet einen Client für Daten und der Server hören sendet es. In diesem Protokoll hat der Server keine Ahnung, ob der Client da ist, weil der Client lediglich die Daten akzeptiert und weiter wartet. Der Client sendet dem Server niemals irgendeine Nachricht.
Dies ist die Voraussetzung für Keep-Alive. async_write
Operationen nicht auf die gleiche Weise fehlschlagen, die async_read
tun, wenn ein Client bereits getrennt ist.
Es gibt andere Optionen, wie den Server haben immer eine ausstehende async_read
Operation, die versucht, 1 Byte zu lesen. Dies wird fehlschlagen, wenn der Client die Verbindung zu der obigen Diskussion des einfachen Befehlsprotokolls trennt, aber niemals erfolgreich sein wird, weil der Client keine Daten über das Simple-Event-Protokoll sendet.
Sie brauchen Herzschlag auf Anwendungsebene - es gibt keinen anderen zuverlässigen Weg. –