Skip to content

Commit 4f2879a

Browse files
committed
Use IPv6 on CI.
1 parent 4efe3f4 commit 4f2879a

File tree

2 files changed

+40
-26
lines changed

2 files changed

+40
-26
lines changed

lib/async/dns/resolver.rb

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -103,7 +103,11 @@ def records_for(name, resource_classes)
103103
end
104104
end
105105

106-
ADDRESS_RESOURCE_CLASSES = [Resolv::DNS::Resource::IN::A, Resolv::DNS::Resource::IN::AAAA]
106+
if System.use_ipv6?
107+
ADDRESS_RESOURCE_CLASSES = [Resolv::DNS::Resource::IN::A, Resolv::DNS::Resource::IN::AAAA]
108+
else
109+
ADDRESS_RESOURCE_CLASSES = [Resolv::DNS::Resource::IN::A]
110+
end
107111

108112
# Yields a list of `Resolv::IPv4` and `Resolv::IPv6` addresses for the given `name` and `resource_class`. Raises a ResolutionFailure if no severs respond.
109113
def addresses_for(name, resource_classes = ADDRESS_RESOURCE_CLASSES)

lib/async/dns/system.rb

Lines changed: 35 additions & 25 deletions
Original file line numberDiff line numberDiff line change
@@ -14,117 +14,127 @@ module Async::DNS
1414
module System
1515
RESOLV_CONF = "/etc/resolv.conf"
1616
HOSTS = "/etc/hosts"
17-
17+
1818
def self.hosts_path
1919
if RUBY_PLATFORM =~ /mswin32|mingw|bccwin/
2020
Win32::Resolv.get_hosts_path
2121
else
2222
HOSTS
2323
end
2424
end
25-
25+
26+
def self.use_ipv6?
27+
begin
28+
list = Socket.ip_address_list
29+
rescue NotImplementedError
30+
return true
31+
end
32+
33+
list.any? {|a| a.ipv6? && !a.ipv6_loopback? && !a.ipv6_linklocal? }
34+
end
35+
2636
# This code is very experimental
2737
class Hosts
2838
def initialize
2939
@addresses = {}
3040
@names = {}
3141
end
32-
42+
3343
attr :addresses
3444
attr :names
35-
45+
3646
# This is used to match names against the list of known hosts:
3747
def call(name)
3848
@names.include?(name)
3949
end
40-
50+
4151
def lookup(name)
4252
addresses = @names[name]
43-
53+
4454
if addresses
4555
addresses.last
4656
else
4757
nil
4858
end
4959
end
50-
60+
5161
alias [] lookup
52-
62+
5363
def add(address, names)
5464
@addresses[address] ||= []
5565
@addresses[address] += names
56-
66+
5767
names.each do |name|
5868
@names[name] ||= []
5969
@names[name] << address
6070
end
6171
end
62-
72+
6373
def parse_hosts(io)
6474
io.each do |line|
6575
line.sub!(/#.*/, '')
6676
address, hostname, *aliases = line.split(/\s+/)
67-
77+
6878
add(address, [hostname] + aliases)
6979
end
7080
end
71-
81+
7282
def self.local
7383
hosts = self.new
74-
84+
7585
path = System::hosts_path
76-
86+
7787
if path and File.exist?(path)
7888
File.open(path) do |file|
7989
hosts.parse_hosts(file)
8090
end
8191
end
82-
92+
8393
return hosts
8494
end
8595
end
86-
96+
8797
def self.parse_resolv_configuration(path)
8898
nameservers = []
8999
File.open(path) do |file|
90100
file.each do |line|
91101
# Remove any comments:
92102
line.sub!(/[#;].*/, '')
93-
103+
94104
# Extract resolv.conf command:
95105
keyword, *args = line.split(/\s+/)
96-
106+
97107
case keyword
98108
when 'nameserver'
99109
nameservers += args
100110
end
101111
end
102112
end
103-
113+
104114
return nameservers
105115
end
106-
116+
107117
def self.standard_connections(nameservers, **options)
108118
connections = []
109-
119+
110120
nameservers.each do |host|
111121
connections << IO::Endpoint.udp(host, 53, **options)
112122
connections << IO::Endpoint.tcp(host, 53, **options)
113123
end
114-
124+
115125
return IO::Endpoint.composite(connections)
116126
end
117-
127+
118128
# Get a list of standard nameserver connections which can be used for querying any standard servers that the system has been configured with. There is no equivalent facility to use the `hosts` file at present.
119129
def self.nameservers(**options)
120130
nameservers = []
121-
131+
122132
if File.exist? RESOLV_CONF
123133
nameservers = parse_resolv_configuration(RESOLV_CONF)
124134
elsif defined?(Win32::Resolv) and RUBY_PLATFORM =~ /mswin32|cygwin|mingw|bccwin/
125135
search, nameservers = Win32::Resolv.get_resolv_info
126136
end
127-
137+
128138
return standard_connections(nameservers, **options)
129139
end
130140

0 commit comments

Comments
 (0)