[Java] NIOのバグにはまってションボリ
Channel IOを使ってIOを多重化すればスレッドが節約できてお得!メモリ使用量も少なめに!
と思い、SocketChannelを使ったテストプログラムを書いてみましたがどうも様子がおかしい。
OP_READだけを関心リストに設定しているのに、selectを抜けてきたチャネルをreadしてみると0バイトが返り、しまいにクライアントがCloseしていないのにEOFを読んできちゃうし。
WindowsのJavaの問題かと思ったがSolaris10のJava 1.5_07で動かしても同じ。
Java 6で直っているのかもしれないが、今のプロジェクトではJava 5で動かさねばならない。
SunのBug databaseを検索すると1.4の頃に同じ挙動のレポートがある模様。
もうちょっと調べて駄目ならスレッド山盛り方式で実装したほうがいいかなあ。