3

私はtcpソケットを開いてデータをストリーミングするRubyクライアントを書いています。

20秒以内にソケットを開くことができなかった場合、タイムアウトエラーが発生します。

begin
  Timeout::timeout(20) { socket = open_socket(host, port) }
rescue Errno::ECONNREFUSED
  puts "Failed to connect to server"
rescue Timeout::Error
  puts "Timeout error occurred while connecting to the server"
end

私のopen_socketメソッドを以下に示します。

def open_socket(host,port)
  TCPSocket.new(host,port)
end

コードは正常に機能します。私の質問は

  1. ソケットプログラミングの標準タイムアウト(秒単位)は何ですか?
  2. 必要に応じて秒単位のタイムアウトを設定できますか?
4

3 に答える 3

0

Linux では、setsockopt/getsocktopt を使用して送信/受信タイムアウトにアクセスできます。

man 7 ソケットを実行し、SO_RCVTIMEO および SO_SNDTIMEO オプションを探します。Setsockopt/getsockopt は、Ruby のソケット オブジェクトで使用できます。

于 2012-10-05T05:38:27.140 に答える
0

タイムアウトが 20 秒であることを確認しているように見える 2 つの記事を見つけました。

2番目の記事は、タイムアウト期間がOSによって定義されていることを暗示しているようです。

2 番目の質問に対する回答がありません。

于 2012-10-04T21:10:07.270 に答える
0

タイムアウトのデフォルト値は 10 秒です。

タイムアウト(秒) { ...}

ブロックを実行し、タイムアウト期間が経過する前にブロックの実行が正常に終了した場合は true を返します。それ以外の場合は、すぐにブロックの実行を終了し、TimeoutError 例外を発生させます。

require 'timeout'
status = timeout(5) {
# something that may take time
}
于 2012-10-05T04:38:14.047 に答える