3

我正在编写一个 Ruby 客户端,它将打开 tcp 套接字和流数据。

如果我无法在 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

这正是你的做法。超时的默认值为 10 秒。

超时(秒){ ...}

如果块执行在超时期限过去之前成功终止,则执行块并返回 true,否则立即终止块的执行并引发 TimeoutError 异常。

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

我发现 2 篇文章似乎确认超时为 20 秒:

第二篇文章似乎暗示超时期限由操作系统定义。

你的第二个问题我没有答案。

于 2012-10-04T21:10:07.270 回答
0

在 Linux 上,可以使用 setsockopt/getsocktopt 访问发送/接收超时。

执行 man 7 socket 并查找 SO_RCVTIMEO 和 SO_SNDTIMEO 选项。setsockopt/getsockopt 在 Ruby 中的套接字对象上可用。

于 2012-10-05T05:38:27.140 回答