[#40647] RAA dead link check — "NAKAMURA, Hiroshi" <nakahiro@...>

なひです。

19 messages 2005/03/04
[#40685] Re: RAA dead link check — "NAKAMURA, Hiroshi" <nakahiro@...> 2005/03/20

-----BEGIN PGP SIGNED MESSAGE-----

[ruby-list:40726] Re: net/httpが返すエラーの捕捉について質問

From: Minero Aoki <aamine@...>
Date: 2005-03-25 14:10:11 UTC
List: ruby-list #40726
青木です。

  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

こうなることには気付いてなかったんですが、ちょっと面倒ですね……。
-------------------------------------------------------------------
青木峰郎

In This Thread