To naprawdę zależy od wybranego protokołu.
Prosty protokół poleceń
Jeśli protokół serwer zawsze czeka na wiadomość od klienta, będziesz zawsze mieć w oczekiwaniu async_read
dla każdego klienta podłączonego. Powinno to powrócić z błędem (EOF), gdy klient rozłącza się w jakikolwiek sposób.
Zachowanie przy życiu jest podejściem, jak wspomniano powyżej, ale oczekuje na prace async_read
dobrze w tym celu.
Prosty protokół zdarzenia
Prosty protokół wydarzenie wiąże klienta nasłuchiwania danych i serwera wysyłającego go. W tym protokole serwer nie ma pojęcia, czy klient istnieje, ponieważ klient akceptuje tylko dane i nadal czeka. Klient nigdy nie wysyła do serwera żadnej wiadomości.
Prezentuje wymóg utrzymania przy życiu. async_write
operacje nie kończą się niepowodzeniem w taki sam sposób, jak robią to async_read
, gdy klient jest już rozłączony.
Istnieją inne opcje, takie jak posiadanie na serwerze zawsze oczekującej operacji async_read
, która próbuje odczytać 1 bajt. To się nie powiedzie, gdy klient rozłączy się podobnie do powyższej dyskusji na temat prostego protokołu, ale nigdy się to nie uda, ponieważ klient nie wysyła danych przez prosty protokół zdarzeń.
Potrzebujesz bicia serca na poziomie aplikacji - nie ma innego niezawodnego sposobu. –