Skip to content

Commit 42d5f7e

Browse files
committed
http/client: Remove address families from candidates once known to be unsupported
1 parent 1338b36 commit 42d5f7e

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"
@@ -202,7 +203,10 @@ local function connect(options, timeout)
202203
}
203204

204205
local lasterr, lasterrno = "The name does not resolve for the supplied parameters"
205-
for _, rec in ipairs(records) do
206+
local i = 1
207+
local n = #records
208+
while i <= n do
209+
local rec = records[i]
206210
connect_params.family = rec.family;
207211
connect_params.host = rec.host;
208212
connect_params.path = rec.path;
@@ -224,6 +228,21 @@ local function connect(options, timeout)
224228
end
225229
timeout = deadline and deadline-monotime()
226230
end
231+
if lasterrno == ce.EAFNOSUPPORT then
232+
-- If an address family is not supported then entirely remove that
233+
-- family from candidate records
234+
local af = connect_params.family
235+
for j=n, i+1, -1 do
236+
if records[j].family == af then
237+
table.remove(records, j)
238+
n = n - 1
239+
end
240+
end
241+
table.remove(records, i)
242+
n = n - 1
243+
else
244+
i = i + 1
245+
end
227246
end
228247
return nil, lasterr, lasterrno
229248
end

0 commit comments

Comments
 (0)