利用できないリモート リソースに TCPSocket 経由で接続するときに、タイムアウトを取得しようとすると問題が発生します。タイムアウトせずに無期限にハングします。理想的には、2分ごとに再接続を試みたいのですが、TCPSocket.new呼び出しがブロックされているようです。timeout() を使用してみましたが、それも何もしません。IRB インスタンスで同じ呼び出しを試みるとまったく問題なく動作しますが、Rails では失敗します。誰でもこれを回避できますか?
私のコードは次のようになります。
def self.connect!
@@connection = TCPSocket.new IP, 4449
end
def self.send(cmd)
puts "send "
unless @@connection
self.connect!
end
loop do
begin
@@connection.puts(cmd)
return
rescue IOError
sleep(self.get_reconnect_delay)
self.connect!
end
end
end