ソケットが切断されているかどうかを単純に検出することは不可能であることはすでに知っています。サーバーとクライアントは、Skypeの場合と同じように、「聞こえますか?」と「ええ、できます。 」と叫ぶ必要があります。
しかし、boost::asio
ソケットが反対側から切断されていると、ソケットから読み取ろうとすると、手に負えない例外が発生します。これは、私にとって十分に役立つ一種の切断検出です。その例外を処理できますか?クラッシュする代わりに、プログラムはコンソールにメッセージを生成しますか?
すべてのためにそれを必要とする人のためのいくつかのコード:
bool SocketClient::read(int bytes, char *text) {
char buffer = 0;
int length = 0;
while(bytes>0) {
size_t len = sock.receive(boost::asio::buffer(&buffer, 1)); //boom: UNHANDLED EXCEPTION
bytes--;
text[length] = buffer;
length++;
}
return true;
}
私はMinecraftサーバーに接続しているので、クライアントが切断されたときを知っています-読み取り/書き込みの試行で例外が発生します。