なひです.

> From: hisanori / sitc.toshiba.co.jp [mailto:hisanori / sitc.toshiba.co.jp]
> Sent: Friday, February 26, 1999 3:00 PM

> > Meeting2000-0.92b1で,一応acceptのEPROTOとwrite syscallのSIGPIPEを
> > 保護してみました.
> 
> いろいろありがとうございます。

使わせて頂いているおかげです.(^-^)

> > acceptの方については「Errno::EPROTO」なんて捕まえ方で
> > 良かったんでしょうか.RubyのErrorクラスの解説を見つけられませんでした.
> > ぴかちう本(やめなさい)待ちでしたっけ? (^_^;
> > 
> > ただ,厳格な(?)だえもんを作ろうとするともっとあちこち面倒ですし,
> > 「正しく(?)例外が上がってるんだから」ということで
> > acceptのEPROTOは無視してもいいのかもしれません.
> 
> 何を捕まえればいいのかわからないんですが、ともかくacceptで例外が上がる
> 可能性があるなら、ループの中でrescueしておいたほうが確かにいいですね。

まだまだ浅いRuby歴ですが,
「UNIX system callの修復不可能なエラーは例外として投げ上げられる」
ということになっているのかなーなんて感じています.

# RubyのplatformはUNIXだけではありませんから,
# 正しい言い方じゃありませんね.(^_^;

で,比較的ありそうだったのがacceptとSIGPIPEで,
実際試してみると(手製のHTTP/1.1クライアント作成途中Rubyスクリプトで
DoSアタックをかけてみると(^_^;)その二つが上がってくるようでした.

# signalは「上がる」じゃ変かしら.(^_^;

> 全部捕まえるかなぁ…。

サーバが落ちたら困りますから,なんでもかんでも捕まえて
全部ログに出しておく,というのも手ですね.(^_^;

> > SIGPIPEの方は,ほっとくと / application.commitを通らないので,
> > 溜めたデータがリセットされちゃいますよね...
> 
> そうなんでしたっけ? SIGKILL(?)以外なら落ちるときでも 
> httpserver.initialze の中の、ensureは通ると思ってました。スレッドが異
> なると駄目なのかなぁ。本当はどうなんでしょう。教えてえらい人。

すいません.クライアント側のRuby scriptを
gdbでattachしてステップ実行してたんですが,
デバッガの影響/なひの操作ミスかもしれません.
ちゃんと実験してから報告します.ごめんなさい.

ああ,まつもとさんからもお返事が...
ああ,すいません.m(..m

> From: matz / ev.netlab.co.jp
> Sent: Friday, February 26, 1999 3:16 PM

> |1 writeの例外として捕まえられないのか
> 
> はOSの性格上できないようです(例外にできるならシグナルは来な
> い,そういうものらしい.ぐるる).

そういえばfcntlとかで「書けますか?」と問い合わせることが
できたようなできないような
(これまたちゃんと調べてないいいかげんな記憶).
ただ,書けることを確認した直後にwriteしても,
その間に線が切れちゃうかもしれないわけで,
いずれにせよSIGPIPEを捕まえるのは必須だと思います.たぶん.(^_^;