Interstage Application Serverにおいて、java.nio.channels.Selector.select(long timeout)で、タイムアウト値が経過する前に、復帰値0で返ることがあるのはなぜですか?

java.nio.channels.Selector.select(long timeout)は、何らかのキーが操作可能になると、タイムアウト値が経過する前に復帰しますが、その場合復帰値は1以上になると考えられます。 タイムアウト前にselectメソッドが0で復帰することがあるのはなぜですか?
Selector.slelectメソッドのAPIドキュメントに記載されているとおり、指定のタイムアウト期間終了だけが復帰条件ではありません。
また、復帰値として"0"となる場合があることについても同APIドキュメントに記載されています。
操作可能なキーの数を見るには、selectメソッドの復帰値を見るのではなく、Selector#selectedKeys()を使用してください。
なお、Selector#select後、Selectorに登録したチャネルを一旦解除せずに、そのまま再びSelector#selectを実行すると、復帰値が0で返ることがあります。

【ご参考】APIドキュメント
https://docs.oracle.com/javase/7/docs/api/java/nio/channels/Selector.html#select%28long%29
製品・サービス区分 Interstage
製品・サービス情報
対象製品 Interstage Application Server
バージョン V11, V10, V9, V8, V7, V6, V5
プラットフォーム Windows, Solaris, Linux
アンサー種別 運用/保守
このページの先頭へ