Ruby で特定のサーバーへの接続を確認したい。したがって、HTTP 要求を begin/rescue コンストラクトにラップし、接続が利用できない場合は数秒後に再試行するだけです。
問題: 接続が利用できない (リンクダウン) 状態でプログラムを起動すると、ある時点で接続が利用可能であっても (ping やブラウザー要求などを介して)、接続を見つけることができません。
コード:
require 'net/http'
loop do
begin
uri = URI.parse 'http://www.example.com'
resp = Net::HTTP.get uri
rescue SocketError => se
puts se
sleep 3
next
rescue Exception => e
puts e
break
end
puts 'It works!'
break
end
再現する手順:
- ネットワーク リンクを停止する
- プログラムを開始
- -> getaddrinfo: 名前またはサービスが不明です
- -> ...
- ネットワーク リンクを再度オンにする
- まだ接続できません、同じエラー
何故ですか?
Ruby バージョン: ruby 1.9.3p392 (2013-02-22 リビジョン 39386) [x86_64-linux]