Ruby套接字编程中的标准套接字超时(秒)是多少?

时间:2012-10-04 19:51:09

标签: ruby sockets tcp stream timeout

我正在编写一个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. 是否可以根据我们的需要设置以秒为单位的超时?

3 个答案:

答案 0 :(得分:0)

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

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

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

答案 1 :(得分:0)

这正是你如何做的。超时的默认值是10秒。

超时(秒){...}

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

require 'timeout'
status = timeout(5) {
# something that may take time
}

答案 2 :(得分:0)

在Linux上,可以使用setsockopt / getsocktopt访问send / recv超时。

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