首页 > 解决方案 > 将超时设置为 Resolv 以从域中获取 IP 地址

问题描述

顺便说一句:我已经看过其他关于 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,因此,我无法知道该域是否不存在,或者它会引发超时。

有什么想法吗?

标签: rubydnsresolv

解决方案


推荐阅读