10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
|
# File 'lib/rcs-common/resolver.rb', line 10
def resolve_dns(dns, use_cache: false)
if use_cache and resolved_dns_cache[dns]
return resolved_dns_cache[dns]
end
ip = nil
Timeout::timeout(8) do
ip = Resolv.getaddress(dns).to_s rescue nil
end
if ip.nil? and defined?(Win32)
Timeout::timeout(10) do
info = Win32::Resolv.get_resolv_info
resolver = Resolv::DNS.new(nameserver: info[1], search: info[0])
ip = resolver.getaddress(dns).to_s rescue nil
end
end
raise("Cannot resolve DNS #{dns.inspect}: unknown host") unless ip
resolved_dns_cache[dns] = ip
return ip
rescue Timeout::Error
raise("Cannot resolve DNS #{dns.inspect}: timeout")
rescue Exception => ex
raise("Cannot resolve DNS #{dns.inspect}: #{ex.message}")
end
|