顺便说一句:我已经看过其他关于 SO 的答案,但它们都没有按预期工作。
看看下面的代码:
require 'resolv'
t = Time.now
Resolv::DNS.open do |dns|
dns.getaddress('thisisaninvaliddomain.com')
end
p Time.now - t
这段代码需要 1.5 ~ 4.5 秒才能运行。
如果我像其他 SO 响应一样添加超时,例如(为 Ruby Resolv.getaddress(ip) 设置超时)建议
require 'resolv'
Resolv::DNS.open do |dns|
dns.timeouts = 1
dns.getaddress('thisisaninvaliddomain.com')
end
它只是没有问题地完成,但是,如果我设置一个较低的超时时间,0.0001
它会失败并显示以下消息:
resolv.rb:379:in 'getaddress': DNS result has no information for thisdomaindoesnotexists.com (Resolv::ResolvError)
如果我尝试使用有效域(如 google.com),它将返回相同的错误而不是 a ResolvTimeout
,因此,我无法知道该域是否不存在,或者它会引发超时。
有什么想法吗?