クライアントからのTCP接続を受け入れ、クライアントがデータを送信することを決定するまでソケットで待機するC++ネットワークアプリケーションがあります(長時間何も送信しない場合がありますが、それで問題ありません)。
ほとんどの場合、クライアントがクラッシュしたり、マシンの電源が切られたりしたときにエラー状態を検出しますが、クライアントへのネットワーク ケーブルが抜かれたときに気付くのに何分もかかるため、できるだけ早くこの状態に気付くことを望んでいます。
クライアントを制御できず、クライアントに「ping」などを送信させることはできません。私のサーバーはクライアントに「ping」パケットを送信しますが(ただし、クライアントは応答を送信しません)、ケーブルが取り外されていても、write()は正しいバイト数を返します(TCPスタックが再試行を送信していることがわかります) Wireshark のパケット)。
接続が失われたことを通知する最良の方法は何ですか? write() 呼び出しで検出できれば最も便利です。
これは、Windows と Linux で動作する必要があります。