新井です。

In message "[ruby-list:33352] Re: IPSocket.getaddress"
  on 13 Jan 2002 17:04:49 +0900,
  Tanaka Akira <akr / m17n.org> wrote:
> In article <hvo66668ztc.fsf / coulee.a02.aist.go.jp>,
>   Tanaka Akira <akr / m17n.org> writes:
> 
> > resolv.rb 内部でも timeout を使っているので、外で設定した timeout が中
> > で捕捉されているようですね。
> > 
> > まぁ、resolv.rb では(一般にはライブラリでは) TimeoutError は使うべきで
> > はないのかも知れませんね。
> 
> 次のように修正するとどうでしょう?

おお、先走ってマニュアルに書いときました。timeout.rb に書くべきだったか。
まあいいや。

| = TimeoutError < Interrupt
| 
| ((<timeout.rb>)) で定義される例外クラスです。関数 (({timeout})) がタイ
| ムアウトすると発生します。
| 
| ライブラリで ((<timeout.rb>)) を使う場合は、ユーザが指定した timeout 
| を捕捉しないように、TimeoutError のサブクラスを定義してライブラリ内では
| これを使用した方が無難なんです。
| 
| 	  ==> foo.rb <==
| 	  require 'timeout.rb'
| 	  class Foo
| 	    FooTimeoutError = Class.new(TimeoutError)
| 	    def longlongtime_method
| 		  timeout(100, FooTimeoutError) {
| 		     ...
| 		  }
| 	    end
| 	  end
| 
| 	  ==> main.rb <==
| 	  require 'foo'
| 	  timeout(5) {
| 	    Foo.new.longlongtime_method
| 	  }
| 
| ((-注: あらい 2002-01-13: [ruby-list:33352] のパッチが必要です-))

--
新井康司 (Koji Arai)