From: Wakou Aoyama Date: 1998-05-01T10:46:08+09:00 Subject: [ruby-list:7815] alarm 青山です。 TCPsocket.open のタイムアウト処理には何か有効な方法があるでしょうか? Perl では、alarm というのを使っていますが、これは Ruby には無いようで、 こんな感じで書いてはみたものの、この為だけに telnet.rb で thread を使 うのも... と、外していました。 def alarm(wait_time) @timer.exit if @timer if not 0 == wait_time @end_time = Time.now + wait_time @timer = Thread.start{ sleep(wait_time) Process.kill('ALRM', Process.pid) } end @end_time - Time.now end def initialize(options) 略 alarm(@options["Timeout"]) trap("ALRM"){ STDERR.print("Timed out.\n"); exit } @sock = TCPsocket.open(@options["Host"], @options["Port"]) alarm(0) 略 end しかし、つい最近 thread は require しなくても使える事を知り(組み込みク ラスと同程度の扱いなんですね)、それならば入れようかと思っています。た だ、alarm は他の所に入れてもらった方が良いような気もしますが、どうしま しょうか? あと、調べればわかりそうなのですが、ちょっと手抜きして質問。 trap("ALRM"){ STDERR.print("Timed out.\n"); exit } ここで、exit ではなく、return nil のような処理をしたいのですが、どのよ うにすれば良いでしょうか? 青山 和光 Wakou Aoyama