私は現在、ソケットselect()呼び出しに関連して作成したプロキシサーバーのバグを修正しようとしています。私は(SocketReactorを使用して)Poco C ++ライブラリを使用しており、問題は実際にはバグである可能性のあるPocoコードにありますが、まだ確認を受け取っていません。
何が起こっているのかというと、接続が突然終了したときはいつでも、ソケットselect()呼び出しがすぐに戻ってきます。これは、私が意図していることだと思いますか?とにかく、読み取り可能なファイル記述子のセット内の切断されたすべてのソケットを返しますが、問題は、Pocoがコードを配置する場所であるonReadableイベントハンドラーを起動しようとすると、「ソケットが接続されていません」という例外がスローされることです。これに対処します。例外がサイレントにキャッチされ、onReadableイベントが発生しない場合、select()呼び出しはすぐに戻り続け、SocketReactorで無限ループが発生します。
Pocoコードを変更して、例外をサイレントにキャッチするのではなく、onDisconnectedなどと呼ばれる新しいイベントを発生させて、クリーンアップを実行できるようにすることを検討していました。
私の質問は、select()呼び出しを使用してソケットが異常に閉じたかどうかを判断するための洗練された方法はありますか?例外メッセージを使用してこれがいつ発生したかを判断することを考えていましたが、これは私には汚いようです。