From: Minero Aoki Date: 2005-03-25T23:10:11+09:00 Subject: [ruby-list:40726] Re: net/httpが返すエラーの捕捉について質問 青木です。 In mail "[ruby-list:40724] Re: net/httpが返すエラーの捕捉について質問" ikezawa@nasuinfo.or.jp (ikezawa) wrote: > 池澤です > 緊急の仕事で、事態がよく把握できないまま、質問してしまいました。 > おっしゃるとおり、rescue で処理できていました。 > > このエラーとは別に、timeout 時間を過ぎたというメッセージで終了してしまう > ケースがありましたが、こちらの方はrescue では捕らえられませんでした。 それはたぶん TimeoutError ですね。 # そうか、TimeoutErrorって StandardError の # 下位クラスじゃなくなったのか…… > ・タイムアウトまでの秒数をのばすための記述方法 も知りたいです。 TimeoutError は net/http が出しているので、以下のようにすれば のばせます。 http.open_timeout = 120 # 接続が確立するまでの秒数 http.read_timeout = 120 # 1 ブロック読むまでの秒数 (read(2) 一回分) nil をセットすると無効にもできます。 ETIMEDOUT はこれとはまた別に OS が出しているんですが、こちらの 値はたぶんのばせないと思います。 > ・タイムアウトで終了してしまうエラーを捕捉する方法も知りたいです。 > (タイムアウトしたら、少し待ってリトライするとかできるといいのですが) rescue にクラスを指定しないと StandardError の下位クラスしか 捕捉できないので、TimeoutError も捕捉する場合は次のようにして ください。 begin コード rescue Errno::ETIMEDOUT, TimeoutError タイムアウトした end こうなることには気付いてなかったんですが、ちょっと面倒ですね……。 ------------------------------------------------------------------- 青木峰郎