Questo in realtà dipende la vostra scelta del protocollo.
Simple Protocol Comando
Se il protocollo server attende sempre per un messaggio da parte del cliente, si avrà sempre un attesa async_read
per ogni client connesso. Questo dovrebbe tornare con un errore (EOF) quando un client si disconnette in qualsiasi modo.
Keep-alive è un approccio come detto sopra, ma in attesa di async_read
funziona correttamente per questo scopo.
Simple Event protocollo
un semplice protocollo evento comporta un client di ascolto per i dati e il server di invio esso. In questo protocollo, il server non ha idea se il client è lì, perché il client accetta solo i dati e continua ad aspettare. Il client non invia mai al server alcun messaggio di sorta.
Questo presenta il requisito per keep-alive. Le operazioni di async_write
non falliscono nello stesso modo in cui lo fa async_read
quando un client è già disconnesso.
Esistono altre opzioni, ad esempio se il server ha sempre un'operazione in sospeso async_read
che tenta di leggere 1 byte. Ciò non riuscirà quando il client si disconnette simile alla precedente discussione sul Simple Command Protocol, ma non avrà mai esito positivo perché il client non invia i dati tramite Simple Event Protocol.
Hai bisogno di un battito cardiaco a livello di applicazione - non c'è altro modo affidabile. –