Skip to content

Commit 09d141d

Browse files
committed
Support a :use_ipv6 option to Resolv#initialize
When set, supports returning IPv6 results even if there is no public IPv6 address for the system. Implements Ruby Feature #14922
1 parent 5e2d487 commit 09d141d

File tree

1 file changed

+15
-2
lines changed

1 file changed

+15
-2
lines changed

lib/resolv.rb

Lines changed: 15 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -84,8 +84,8 @@ def self.each_name(address, &proc)
8484
##
8585
# Creates a new Resolv using +resolvers+.
8686

87-
def initialize(resolvers=[Hosts.new, DNS.new])
88-
@resolvers = resolvers
87+
def initialize(resolvers=nil, use_ipv6: nil)
88+
@resolvers = resolvers || [Hosts.new, DNS.new(DNS::Config.default_config_hash.merge(use_ipv6: use_ipv6))]
8989
end
9090

9191
##
@@ -408,6 +408,11 @@ def each_address(name)
408408
end
409409

410410
def use_ipv6? # :nodoc:
411+
use_ipv6 = @config.use_ipv6?
412+
unless use_ipv6.nil?
413+
return use_ipv6
414+
end
415+
411416
begin
412417
list = Socket.ip_address_list
413418
rescue NotImplementedError
@@ -1006,6 +1011,7 @@ def lazy_initialize
10061011
@mutex.synchronize {
10071012
unless @initialized
10081013
@nameserver_port = []
1014+
@use_ipv6 = nil
10091015
@search = nil
10101016
@ndots = 1
10111017
case @config_info
@@ -1030,6 +1036,9 @@ def lazy_initialize
10301036
if config_hash.include? :nameserver_port
10311037
@nameserver_port = config_hash[:nameserver_port].map {|ns, port| [ns, (port || Port)] }
10321038
end
1039+
if config_hash.include? :use_ipv6
1040+
@use_ipv6 = config_hash[:use_ipv6]
1041+
end
10331042
@search = config_hash[:search] if config_hash.include? :search
10341043
@ndots = config_hash[:ndots] if config_hash.include? :ndots
10351044

@@ -1085,6 +1094,10 @@ def nameserver_port
10851094
@nameserver_port
10861095
end
10871096

1097+
def use_ipv6?
1098+
@use_ipv6
1099+
end
1100+
10881101
def generate_candidates(name)
10891102
candidates = nil
10901103
name = Name.create(name)

0 commit comments

Comments
 (0)