11local monotime = require " cqueues" .monotime
22local ca = require " cqueues.auxlib"
3+ local ce = require " cqueues.errno"
34local cs = require " cqueues.socket"
45local cqueues_dns = require " cqueues.dns"
56local 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
229248end
0 commit comments