[Java] NIOのバグにはまってションボリ

Channel IOを使ってIOを多重化すればスレッドが節約できてお得!メモリ使用量も少なめに!
と思い、SocketChannelを使ったテストプログラムを書いてみましたがどうも様子がおかしい。


OP_READだけを関心リストに設定しているのに、selectを抜けてきたチャネルをreadしてみると0バイトが返り、しまいにクライアントがCloseしていないのにEOFを読んできちゃうし。
WindowsJavaの問題かと思ったがSolaris10Java 1.5_07で動かしても同じ。
Java 6で直っているのかもしれないが、今のプロジェクトではJava 5で動かさねばならない。
SunのBug databaseを検索すると1.4の頃に同じ挙動のレポートがある模様。
もうちょっと調べて駄目ならスレッド山盛り方式で実装したほうがいいかなあ。