# class Resolv

Resolv is a thread-aware DNS resolver library written in Ruby. Resolv can handle multiple DNS requests concurrently without blocking the entire Ruby interpreter.

See also resolv-replace.rb to replace the libc resolver with Resolv.

Resolv can look up various DNS resources using the DNS module directly.

Examples:

    p Resolv.getaddress "www.ruby-lang.org"
    p Resolv.getname "210.251.121.214"

    Resolv::DNS.open do |dns|
      ress = dns.getresources "www.ruby-lang.org", Resolv::DNS::Resource::IN::A
      p ress.map(&:address)
      ress = dns.getresources "ruby-lang.org", Resolv::DNS::Resource::IN::MX
      p ress.map { |r| [r.exchange.to_s, r.preference] }
    end

## Bugs¶ ↑

- NIS is not supported.

- /etc/nsswitch.conf is not supported.

### Constants

AddressRegex

  Address Regexp to use for matching IP addresses.

DefaultResolver

  Default resolver to use for Resolv class methods.

### Public Class Methods

each_address(name, &block) click to toggle source

Iterates over all IP addresses for `name`.

    # File lib/resolv.rb, line 56
    def self.each_address(name, &block)
      DefaultResolver.each_address(name, &block)
    end

each_name(address, &proc) click to toggle source

Iterates over all hostnames for `address`.

    # File lib/resolv.rb, line 77
    def self.each_name(address, &proc)
      DefaultResolver.each_name(address, &proc)
    end

getaddress(name) click to toggle source

Looks up the first IP address for `name`.

    # File lib/resolv.rb, line 42
    def self.getaddress(name)
      DefaultResolver.getaddress(name)
    end

getaddresses(name) click to toggle source

Looks up all IP address for `name`.

    # File lib/resolv.rb, line 49
    def self.getaddresses(name)
      DefaultResolver.getaddresses(name)
    end

getname(address) click to toggle source

Looks up the hostname of `address`.

    # File lib/resolv.rb, line 63
    def self.getname(address)
      DefaultResolver.getname(address)
    end

getnames(address) click to toggle source

Looks up all hostnames for `address`.

    # File lib/resolv.rb, line 70
    def self.getnames(address)
      DefaultResolver.getnames(address)
    end

new(resolvers=[Hosts.new, DNS.new]) click to toggle source

Creates a new Resolv using `resolvers`.

    # File lib/resolv.rb, line 84
    def initialize(resolvers=[Hosts.new, DNS.new])
      @resolvers = resolvers
    end

### Public Instance Methods

each_address(name) { |name| ... } click to toggle source

Iterates over all IP addresses for `name`.

    # File lib/resolv.rb, line 108
    def each_address(name)
      if AddressRegex =~ name
        yield name
        return
      end
      yielded = false
      @resolvers.each {|r|
        r.each_address(name) {|address|
          yield address.to_s
          yielded = true
        }
        return if yielded
      }
    end

each_name(address) { |name| ... } click to toggle source

Iterates over all hostnames for `address`.

    # File lib/resolv.rb, line 143
    def each_name(address)
      yielded = false
      @resolvers.each {|r|
        r.each_name(address) {|name|
          yield name.to_s
          yielded = true
        }
        return if yielded
      }
    end

getaddress(name) click to toggle source

Looks up the first IP address for `name`.

    # File lib/resolv.rb, line 91
    def getaddress(name)
      each_address(name) {|address| return address}
      raise ResolvError.new("no address for #{name}")
    end

getaddresses(name) click to toggle source

Looks up all IP address for `name`.

    # File lib/resolv.rb, line 99
    def getaddresses(name)
      ret = []
      each_address(name) {|address| ret << address}
      return ret
    end

getname(address) click to toggle source

Looks up the hostname of `address`.

    # File lib/resolv.rb, line 126
    def getname(address)
      each_name(address) {|name| return name}
      raise ResolvError.new("no name for #{address}")
    end

getnames(address) click to toggle source

Looks up all hostnames for `address`.

    # File lib/resolv.rb, line 134
    def getnames(address)
      ret = []
      each_name(address) {|name| ret << name}
      return ret
    end