class FTW::DNS

I wrap whatever Ruby provides because it is historically very inconsistent in implementation behavior across ruby platforms and versions. In the future, this will probably implement the DNS protocol, but for now chill in the awkward, but already-written, ruby stdlib.

I didn't really want to write a DNS library, but a consistent API and behavior is necessary for my continued sanity :)

Constants

V4_IN_V6_PREFIX

The ipv4-in-ipv6 address space prefix.

Attributes

resolvers[R]

An array of resolvers. By default this includes a FTW::DNS::DNS instance.

Public Class Methods

new() click to toggle source

A new resolver.

The default set of resolvers is only {FTW::DNS::DNS} which does DNS resolution.

# File lib/ftw/dns.rb, line 28
def initialize
  @resolvers = [FTW::DNS::DNS.new]
end

Public Instance Methods

resolve(hostname) click to toggle source

Resolve a hostname.

Returns an array of all addresses for this host. Empty array resolution failure.

# File lib/ftw/dns.rb, line 36
def resolve(hostname)
  return @resolvers.reduce([]) do |memo, resolver|
    result = resolver.resolve(hostname)
    memo += result unless result.nil?
  end
end
resolve_random(hostname) click to toggle source

Resolve hostname and choose one of the results at random.

Use this method if you are connecting to a hostname that resolves to multiple addresses.

# File lib/ftw/dns.rb, line 47
def resolve_random(hostname)
  addresses = resolve(hostname)
  return addresses[rand(addresses.size)]
end