From: matz@... (Yukihiro Matsumoto) Date: 1999-10-19T14:13:22+09:00 Subject: [ruby-dev:8061] Re: [ruby-list:17813] Re: Exception.html & Errno.html for ruby-man-1.4.2-jp まつもと ゆきひろです In message "[ruby-dev:8060] Re: [ruby-list:17813] Re: Exception.html & Errno.html for ruby-man-1.4.2-jp" on 99/10/19, "NAKAMURA, Hiroshi" writes: |> 誰も読んでいなかったというのが、相手がソケット(or PIPE)を |> close()していたという場合のみSIGPIPE(EPIPE)が発生しますが、 |> これは1バイトでもwrite()した瞬間に分かります。 | |なひもそう思います.で,write syscall中にSIGPIPEが飛んできて, |それをRuby本体が捕まえて, |Error::EPIPEという例外が「メインスレッドに」飛びます. | |# でしたよね? 変更されましたっけ? ^^; えーと、まずwriteが-1を返し、errnoが EPIPE にセットされます。 ですから、writeを呼んだスレッドに Errno::EPIPE が飛びます。 その後、(昔の動作では)SIGPIPEが来て、シグナルハンドラがメ インスレッドに Signal 例外が飛ばします。 ってことで、結局 SIGPIPE を無視しても EPIPE で検出できると思 うのですが、どうでしょう? 問題になる可能性があるのは、write でバッファがいっぱいになるタイミングの関係で、EPIPEが検出さ れずにSIGPIPEが来ちゃうことが、もしあれば、それの検出が(でき ない、遅れる)可能性があることですね。 でも、あんまりなさそう。 まつもと ゆきひろ /:|)