ruby - 将超时设置为 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
,因此,我无法知道该域是否不存在,或者它会引发超时。
有什么想法吗?
解决方案
推荐阅读
- c++ - 为什么我的 printList 函数只打印链表中的最后一项?
- android-gradle-plugin - 将 Mobbeel Fataar 插件与 uploadArchives 任务一起使用时出现问题
- r - 从 2 月开始的日期加上 6 个月
- azure-ad-b2c - Azure AD B2C 使用现有的 on-perm 服务进行身份验证
- asp.net-mvc - 如何使用 Request.Form 方法将 jquery 值传递给我的控制器?
- excel - 从 Excel 表中重置数据行(除了第一个)而不破坏表
- android - 如何告诉 gradle / Android Studio 不要让下载的依赖项过期
- docker - JFrog Artifactory 将什么令牌端点用于其 Docker 注册表?
- c++ - 提交到 Kattis c++ 时出现运行时错误
- angular - 为什么在 Ionic 视图中只有一些元素更新?仅适用于某些设备?