summaryrefslogtreecommitdiff
path: root/lib
diff options
context:
space:
mode:
authorJeremy Evans <code@jeremyevans.net>2019-07-07 18:51:42 -0700
committerJeremy Evans <code@jeremyevans.net>2019-10-21 12:48:38 -0700
commitf37cc1c719f12d2cad6032aa4e6f4236f0604992 (patch)
tree95b25d63baae367a61a9cce0a3f04e2cd163acf0 /lib
parent62d43828770211470bcacb9e943876f981b5a1b4 (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
Diffstat (limited to 'lib')
-rw-r--r--lib/resolv.rb9
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