我正在编写一个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
代码工作正常。我的问题是
答案 0 :(得分:0)
答案 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中的套接字对象上可用。