なひです.そろそろruby-dev? > From: Takashima, Makoto [mailto:tksmmkt / coral.ocn.ne.jp] > Sent: Tuesday, October 19, 1999 2:30 AM > Rubyの実装については詳しくないので単なるUnixのソケット(or > PIPE)の話として言えば、「送ったつもりになっていたら実はその > PIPEの先を誰も読んでなかった」場合にはバッファが一杯になるま > でwrite()は成功して、バッファが一杯になったらBLOCKモードであ > ればwrite()はブロックし、NON-BLOCKモードであればwrite()は > EAGAINとかEWOULDBLOCKとかいったエラーで失敗しますので > SIGPIPE(EPIPE)は関係ないと思います。 はい.この場合SIGPIPEは上がりませんね. > 誰も読んでいなかったというのが、相手がソケット(or PIPE)を > close()していたという場合のみSIGPIPE(EPIPE)が発生しますが、 > これは1バイトでもwrite()した瞬間に分かります。 なひもそう思います.で,write syscall中にSIGPIPEが飛んできて, それをRuby本体が捕まえて, Error::EPIPEという例外が「メインスレッドに」飛びます. # でしたよね? 変更されましたっけ? ^^; 結局,[ruby-list:17577]が真であれば何も問題はないのですが, [ruby-list:17601]だそうなのでちょっと困る,というですよね. (上記が真なら)メインスレッド以外ではError::EPIPEをrescueできないし, メインスレッドでもSIGPIPEが飛んでくることがある,と. > ですから、基本的にSIGPIPEによる処理とEPIPEによる処理に違いは > ないと思います。 そうできると美しい,というのは理解できます. -- NaHi, nakahiro, a.k.a. NAKAMURA, Hiroshi http://www.sarion.com Sarion Systems Research