From: sinara@... Date: 1997-03-06T13:24:56+09:00 Subject: [ruby-list:2324] Re: shutdown 原です。 > まつもと ゆきひろです. > |原です。 > | > |どうもあるスレッドでソケットに対して shutdown(2) するとブロック > |してしまうことがあるのですが、shutdown はブロックしないはずでは > |ないでしょうか。 > > しないはずです.いや,LINGER時間とかとも関係あるのかな? > > いずれにせよ,システムコールレベルで検出できないのでブロック > するとしても避けようがありません.この辺がユーザレベルスレッ > ドの悲しいところ…. そうですか。また実験してみましたが確かにブロックします。その スレッドだけ止まっているのか、全体が止まっているのかまだ分か らないのですが。しかし close はブロックしないのはなぜかなあ。 rbgw がばりばりに動くようになったので、前にここに出した httpd.rb を rbgw でも動くように直しています。 で、相手が Netscape の時、POST コマンドを受けて返答を終えた 後始末にソケットを close すると、急にコネクションを切られた とか言って Netscape がエラーを出します。Content-length は 返しているのに。これは rbgw の話で linux 上の httpd.rb では 起こりません。 で、しょうがないから close はやめて、flush してから shutdown 2 することにしたらエラーは出なくなりました。ところが今度は linux 上で動かすとしばしば shutdown でブロックするのです。 困った。 幼稚な質問かもしれませんが(ここで聞くべきではないかもしれな い)、ソケットストリームにおいても EOF というのはあるんです よね?それは特殊なキャラクタ(例えば \x00 とか)ではなくて、 我々が読めるデータの下層のプロトコルに近いレベルで送られて来 るのでしょうか。 もう一つ GC についてですが、IO オブジェクトを open された まま close せずにいたとしても、参照がなくなれば GC の対象 になると思うのですが、そのとき自動的に close をしますよね? それはソケットに対してもそうですか?