Module: Socketry::Resolver::System
- Defined in:
- lib/socketry/resolver/system.rb
Overview
System DNS resolver backed by the POSIX getaddrinfo(3) function
Class Method Summary collapse
-
.resolve(hostname, timeout: nil) ⇒ IPAddr
Resolve a domain name using IPSocket.getaddress.
Class Method Details
.resolve(hostname, timeout: nil) ⇒ IPAddr
Resolve a domain name using IPSocket.getaddress. This uses getaddrinfo(3) on POSIX operating systems.
19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 |
# File 'lib/socketry/resolver/system.rb', line 19 def resolve(hostname, timeout: nil) raise TypeError, "expected String, got #{hostname.class}" unless hostname.is_a?(String) begin case timeout when Integer, Float # NOTE: ::Timeout is not thread safe. For thread safety, use Socketry::Resolver::Resolv result = ::Timeout.timeout(timeout) { IPSocket.getaddress(hostname) } when NilClass result = IPSocket.getaddress(hostname) else raise TypeError, "expected Numeric, got #{timeout.class}" end rescue ::SocketError => ex raise Socketry::Resolver::Error, ex., ex.backtrace rescue ::Timeout::Error => ex raise Socketry::TimeoutError, ex., ex.backtrace end begin IPAddr.new(result) rescue IPAddr::InvalidAddressError => ex raise Socketry::AddressError, ex., ex.backtrace end end |