diff options
author | Jeremy Evans <code@jeremyevans.net> | 2019-07-07 18:51:42 -0700 |
---|---|---|
committer | Jeremy Evans <code@jeremyevans.net> | 2019-10-21 12:48:38 -0700 |
commit | f37cc1c719f12d2cad6032aa4e6f4236f0604992 (patch) | |
tree | 95b25d63baae367a61a9cce0a3f04e2cd163acf0 | |
parent | 62d43828770211470bcacb9e943876f981b5a1b4 (diff) |
Fallback to TCP in resolv if UDP bind raises EACCES
Original patch from Andy Grimm.
Fixes [Bug #10747]
Notes
Notes:
Merged: https://github.com/ruby/ruby/pull/2587
-rw-r--r-- | lib/resolv.rb | 9 |
1 files changed, 7 insertions, 2 deletions
diff --git a/lib/resolv.rb b/lib/resolv.rb index 2b81c05a2e..3d401cc509 100644 --- a/lib/resolv.rb +++ b/lib/resolv.rb @@ -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 |