0

利用できないリモート リソースに 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
4

1 に答える 1

0

残念ながら、現在、TCPSocket に直接タイムアウトを設定する方法はありません。

機能リクエストについては、http://bugs.ruby-lang.org/issues/5101を参照してください。基本的な Socket クラスを使用し、ソケット オプションを設定します。

于 2012-11-24T14:58:35.080 に答える