 
 This page contains automated test results for code from O'Reilly's Ruby Cookbook. If this code looks interesting or useful, you might want to buy the whole book.
| Performing DNS Queries | ||
|---|---|---|
| Code | Expected | Actual | 
| require 'resolv'
Resolv::DNS.new.each_address("oreilly.com") { |addr| puts addr } | 208.201.239.36 208.201.239.37 | 208.201.239.36 208.201.239.37 | 
| dns = Resolv::DNS.new domain = "oreilly.com" dns.each_resource(domain, Resolv::DNS::Resource::IN::MX) do |mail_server| puts mail_server.exchange end | smtp1.oreilly.com smtp2.oreilly.com | smtp1.oreilly.com smtp2.oreilly.com | 
| dns.each_resource(domain, Resolv::DNS::Resource::IN::NS) do |nameserver| puts nameserver.name end | a.auth-ns.sonic.net b.auth-ns.sonic.net c.auth-ns.sonic.net ns.oreilly.com | ns.oreilly.com a.auth-ns.sonic.net b.auth-ns.sonic.net c.auth-ns.sonic.net | 
| require 'resolv-replace'
def multiple_lookup(*names)
  dns = Resolv::DNS.new
  results = {} 
  threads = []
  names.each do |name|
    threads << Thread.new(name) do |name|
      begin
        dns.each_address(name) { |a| (results[name] ||= []) << a }
      rescue Resolv::ResolvError
        results[name] = nil
      end
    end
  end
  threads.each { |t| t.join }
  return results
end
domains = ("a".."z").collect { |l| l + '.com' }
multiple_lookup(*domains).each do |name, addresses|
  if addresses
    puts "#{name}: #{addresses.size} address#{addresses.size == 1 ? "" : "es"}"
  end
end | x.com: 4 addresses z.com: 1 address q.com: 1 address | x.com: 4 addresses z.com: 1 address q.com: 1 address |