2012-01-13 11 views
3

私はいくつかのサーバーに複数の接続があり、このためにNIOを使用したいという状況があります。NIOチャンネルの接続エラーを検出する方法

セレクタは、読み込むデータがあるときに私に教えてくれます。接続がもはや接続されていないことを知る方法はありますか?書き込みが失敗したときや、何らかの操作でスローされた例外をキャッチするとか? 私はこれをノンブロッキングにする必要があります。これは、接続が失敗した場合、チャンネルを再確立する(つまり、同じサーバーへの新しいチャンネルが確立される)ようにしたいと思います。

答えて

3

読み取り/書き込みの例外が発生します。

セレクタに対する読み書きのためにチャンネルが登録されている場合、チャンネルが破損したときにselect()が戻り、チャンネルの選択キーが読み書き可能であることを示します。次の読み書きで例外が発生します。

+0

ありがとうございます!それは接続の失敗に対しても機能するように思われるので、読み書きにも意味があります。 – jbx

+1

*チャンネルが壊れている場合、select()が戻り、チャンネルの選択キーが読み書き可能であることを示します*、これは当てはまりません、SocketChannelから読み込み中、ケーブルが抜かれています。 'は** 0 ** **を返し続け、チャンネルは決して再び選択されません。読み込み/書き込み可能な状態を無視してチャンネルを読み書きすると、 'read()'は** - **を返さず、** 0 **を返し続け、 'write()'は例外をスローしません。現在、私はソケットの切断を検出する方法が見つからない、誰かが私に手掛かりを与える? – neevek

+0

@neevekこれまでこれを解決しましたか? –

関連する問題