class Resolv::DNS
Public Instance Methods
each_resource(name, typeclass, &proc)
click to toggle source
# File lib/spf/ext/resolv.rb, line 15 def each_resource(name, typeclass, &proc) lazy_initialize protocols = {} # PATCH requesters = {} # PATCH senders = {} #begin # PATCH @config.resolv(name) {|candidate, tout, nameserver, port| msg = Message.new msg.rd = 1 msg.add_question(candidate, typeclass) protocol = protocols[candidate] ||= :udp # PATCH requester = requesters[[protocol, nameserver]] ||= case protocol # PATCH when :udp then make_udp_requester # PATCH when :tcp then make_tcp_requester(nameserver, port) # PATCH end # PATCH sender = senders[[candidate, requester, nameserver, port]] ||= # PATCH requester.sender(msg, candidate, nameserver, port) # PATCH reply, reply_name = requester.request(sender, tout) case reply.rcode when RCode::NoError if protocol == :udp and reply.tc == 1 # PATCH # Retry via TCP: # PATCH protocols[candidate] = :tcp # PATCH redo # PATCH else # PATCH extract_resources(reply, reply_name, typeclass, &proc) end # PATCH return when RCode::NXDomain raise Config::NXDomain.new(reply_name.to_s) else raise Config::OtherResolvError.new(reply_name.to_s) end } ensure requesters.each_value { |requester| requester.close } # PATCH #end # PATCH end
make_tcp_requester(host, port)
click to toggle source
alias_method :make_udp_requester, :make_requester
# File lib/spf/ext/resolv.rb, line 56 def make_tcp_requester(host, port) return Requester::TCP.new(host, port) rescue Errno::ECONNREFUSED # Treat a refused TCP connection attempt to a nameserver like a timeout, # as Resolv::DNS::Config#resolv considers ResolvTimeout exceptions as a # hint to try the next nameserver: raise ResolvTimeout end