酒本です。

早速どうもです!

> require 'resolv-replace'
>
> するとどうなります?実際にこれでうまくいったという実例を知ら
> ないのでぜひ結果を教えて欲しい(興味本位(^^;)

ええと、timeout では 5 秒に設定していますが、実際に timeout.rb で
スレッドが斬られているわけではないようです。
たまたま1回目は5秒で raise? したので飛び上がって喜んだのですが、
次は 30秒かかったり、例外が発生するまでの時間がまちまちです。

大きな違いはコントロール+Cが効くことですね。

>  <http://www.ruby-lang.org/ja/man-1.6/?cmd=view;name=trap%3A%3Atimeout>
>
> も参考にどうぞ。
>
> --
> 新井康司 (Koji Arai)

おお!まさにこのことですね。大変参考になります。
ところで、resolv.rb ですが、ユーザがわざわざ timeout() を使わなくてもよい、
という仕様なんでしょうか?「InitialTimeout = 5」という部分が目にとまったの
で。


saka$ date
2002年  1月 13日 日曜日 15:48:00 JST
saka$ /usr/bin/ruby soc.rb
^[[A^[[A^[[A
/usr/lib/ruby/1.6/resolv.rb:660:in `resolv': DNS resolv timeout:
www.mitsuijoho.co.jp (Resolv::ResolvEr
ror)
        from /usr/lib/ruby/1.6/resolv.rb:650:in `each'
        from /usr/lib/ruby/1.6/resolv.rb:650:in `resolv'
        from /usr/lib/ruby/1.6/resolv.rb:345:in `each_resource'
        from /usr/lib/ruby/1.6/resolv.rb:307:in `each_address'
        from /usr/lib/ruby/1.6/resolv.rb:182:in `each_address'
        from /usr/lib/ruby/1.6/resolv.rb:181:in `each'
        from /usr/lib/ruby/1.6/resolv.rb:181:in `each_address'
        from /usr/lib/ruby/1.6/resolv.rb:167:in `getaddress'
        from /usr/lib/ruby/1.6/resolv.rb:146:in `getaddress'
        from /usr/lib/ruby/1.6/resolv-replace.rb:12:in `getaddress'
        from soc.rb:6
        from soc.rb:5:in `timeout'
        from soc.rb:5
saka$ date
2002年  1月 13日 日曜日 15:49:19 JST

次の例は
------------------------
require 'socket'
require 'timeout'
require 'resolv-replace'

timeout(5) do
p Resolv.getaddress("www.mitsuijoho.co.jp")
end
------------------------
の実行結果です。今度もおよそ1分です。

saka$ date
2002年  1月 13日 日曜日 16:10:01 JST
saka$ /usr/bin/ruby soc.rb
date
/usr/lib/ruby/1.6/resolv.rb:660:in `resolv': DNS resolv timeout:
www.mitsuijoho.co.jp (Resolv::ResolvEr
ror)
        from /usr/lib/ruby/1.6/resolv.rb:650:in `each'
        from /usr/lib/ruby/1.6/resolv.rb:650:in `resolv'
        from /usr/lib/ruby/1.6/resolv.rb:345:in `each_resource'
        from /usr/lib/ruby/1.6/resolv.rb:307:in `each_address'
        from /usr/lib/ruby/1.6/resolv.rb:182:in `each_address'
        from /usr/lib/ruby/1.6/resolv.rb:181:in `each'
        from /usr/lib/ruby/1.6/resolv.rb:181:in `each_address'
        from /usr/lib/ruby/1.6/resolv.rb:167:in `getaddress'
        from /usr/lib/ruby/1.6/resolv.rb:146:in `getaddress'
        from soc.rb:7
        from soc.rb:5:in `timeout'
        from soc.rb:5
saka$ date
2002年  1月 13日 日曜日 16:11:21 JST

>
--
sakamoto