Skip to content

Commit 90503fb

Browse files
committed
http/client: Remove address families from candidates once known to be unsupported
1 parent 267167b commit 90503fb

File tree

1 file changed

+20
-1
lines changed

1 file changed

+20
-1
lines changed

http/client.lua

+20-1
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,6 @@
11
local monotime = require "cqueues".monotime
22
local ca = require "cqueues.auxlib"
3+
local ce = require "cqueues.errno"
34
local cs = require "cqueues.socket"
45
local cqueues_dns = require "cqueues.dns"
56
local cqueues_dns_record = require "cqueues.dns.record"
@@ -192,7 +193,10 @@ local function connect(options, timeout)
192193
}
193194

194195
local lasterr, lasterrno = "The name does not resolve for the supplied parameters"
195-
for _, rec in ipairs(records) do
196+
local i = 1
197+
local n = #records
198+
while i <= n do
199+
local rec = records[i]
196200
connect_params.family = rec.family;
197201
connect_params.host = rec.host;
198202
connect_params.path = rec.path;
@@ -214,6 +218,21 @@ local function connect(options, timeout)
214218
end
215219
timeout = deadline and deadline-monotime()
216220
end
221+
if lasterrno == ce.EAFNOSUPPORT then
222+
-- If an address family is not supported then entirely remove that
223+
-- family from candidate records
224+
local af = connect_params.family
225+
for j=n, i+1, -1 do
226+
if records[j].family == af then
227+
table.remove(records, j)
228+
n = n - 1
229+
end
230+
end
231+
table.remove(records, i)
232+
n = n - 1
233+
else
234+
i = i + 1
235+
end
217236
end
218237
return nil, lasterr, lasterrno
219238
end

0 commit comments

Comments
 (0)