keitaです。
ちょっと間を空けちゃいましたが。
* timeoutx
> > ただ、必ずwebrickのあとにロードする必要がありますねえ。
>
> 勘違いしてなければ、timeoutx.rb から require 'timeout.rb' して
> るので、どっちが先でもよいように思います。
すみません、これはこちらの勘違いでした(^-^;
やはりどっちが先でもいいわけですね。
* zero copy
> とりあえず、CVS版では HTTPResponse に手を入れて、ボディが IO
> のときは _send_file() というメソッドを呼ぶようにしてみました。
CVS版での変更を確認しました。
sendfileが使いやすい感じにして頂いてるので、とてもありがたいです。
> しかし、書いてから気付いたんですが、
> http://www.FreeBSD.org/cgi/man.cgi?query=sendfile&manpath=Red+Hat+Linux%2Fi386+7.3
> あたりを見ると、
>
> Presently the descriptor from which data is read cannot
> correspond to a socket, it must correspond to a file which
> supports mmap()-like operations.
>
> と書いてあったりします。もしかして、File と IO で挙動を分けた
> ほうがよかったりするんですかねえ。
これは自分も気になっていたんですが、
まぁ socket to socket で転送するような状況はWEBrickに限っては
まずなさそうなのでとりあえずこのままでも問題ないかとタカくくってました(^-^;
またこの文章の書き方だと将来的には読み込み側がsocketでも
勝手に転送してくれるようになるんじゃないかと期待してます。
一応acceleratorでは読み込み側が socket など対応してない descriptor
のためにエラーを起こした場合はWEBrickオリジナルの_send_file()を
呼ぶようにしたいと思います。
> あと、HP-UX や FreeBSD のマニュアルによれば、バイト数に 0 を指
> 定すると EOF まで転送すると書かれていて、納得の仕様なんですが、
> Solaris や Linux のマニュアルからは読み取れませんでした。
Linuxについては実際に確認してみましたが、
size = 0 では 0 byte 書き込むという意味になっちゃうみたいです。
つまりEOFまでといった便利そうな解釈をしてくれません。
うーん結構色々違ってるもんですね……
やっぱり、じっくりゆっくりと情報を収集していくしかなさそうです。
---
Name: 山口 慶太 (keita yamaguchi)
Mail: keita@kyomu.info
URL : http://kyomu.info/