Fallback to TCP in resolv if UDP bind raises EACCES

Original patch from Andy Grimm.

Fixes [Bug #10747]
This commit is contained in:
Jeremy Evans 2019-07-07 18:51:42 -07:00
parent 62d4382877
commit f37cc1c719
Notes: git 2019-10-22 04:49:05 +09:00

View File

@ -514,10 +514,15 @@ class Resolv
def fetch_resource(name, typeclass)
lazy_initialize
requester = make_udp_requester
begin
requester = make_udp_requester
rescue Errno::EACCES
# fall back to TCP
end
senders = {}
begin
@config.resolv(name) {|candidate, tout, nameserver, port|
requester ||= make_tcp_requester(nameserver, port)
msg = Message.new
msg.rd = 1
msg.add_question(candidate, typeclass)
@ -550,7 +555,7 @@ class Resolv
end
}
ensure
requester.close
requester&.close
end
end