@@ -112,17 +112,17 @@ local function each_matching_record(pkt, name, type)
112
112
return pkt :grep (params )
113
113
end
114
114
115
- local function dns_lookup (records , dns_resolver , host , query_type , filter_type , timeout )
115
+ local function dns_lookup (records , dns_resolver , host , port , query_type , filter_type , timeout )
116
116
local packet = dns_resolver :query (host , query_type , nil , timeout )
117
117
if not packet then
118
118
return
119
119
end
120
120
for rec in each_matching_record (packet , host , filter_type ) do
121
121
local t = rec :type ()
122
122
if t == cqueues_dns_record .AAAA then
123
- records :add_v6 (rec :addr ())
123
+ records :add_v6 (rec :addr (), port )
124
124
elseif t == cqueues_dns_record .A then
125
- records :add_v4 (rec :addr ())
125
+ records :add_v4 (rec :addr (), port )
126
126
end
127
127
end
128
128
end
@@ -144,20 +144,22 @@ function records_mt:__len()
144
144
return self .n
145
145
end
146
146
147
- function records_methods :add_v4 (addr )
147
+ function records_methods :add_v4 (addr , port )
148
148
local n = self .n + 1
149
149
self [n ] = {
150
150
family = cs .AF_INET ;
151
151
addr = addr ;
152
+ port = port ;
152
153
}
153
154
self .n = n
154
155
end
155
156
156
- function records_methods :add_v6 (addr )
157
+ function records_methods :add_v6 (addr , port )
157
158
local n = self .n + 1
158
159
self [n ] = {
159
160
family = cs .AF_INET6 ;
160
161
addr = addr ;
162
+ port = port ;
161
163
}
162
164
self .n = n
163
165
end
@@ -206,28 +208,29 @@ local function lookup_records(options, timeout)
206
208
end
207
209
208
210
local host = options .host
211
+ local port = options .port
209
212
210
213
local ipv4 = IPv4address :match (host )
211
214
if ipv4 then
212
- records :add_v4 (host )
215
+ records :add_v4 (host , port )
213
216
return records
214
217
end
215
218
216
219
local ipv6 = IPv6addrz :match (host )
217
220
if ipv6 then
218
- records :add_v6 (host )
221
+ records :add_v6 (host , port )
219
222
return records
220
223
end
221
224
222
225
local dns_resolver = options .dns_resolver or cqueues_dns .getpool ()
223
226
if family == cs .AF_UNSPEC then
224
227
local deadline = timeout and monotime ()+ timeout
225
- dns_lookup (records , dns_resolver , host , cqueues_dns_record .AAAA , nil , timeout )
226
- dns_lookup (records , dns_resolver , host , cqueues_dns_record .A , nil , deadline and deadline - monotime ())
228
+ dns_lookup (records , dns_resolver , host , port , cqueues_dns_record .AAAA , nil , timeout )
229
+ dns_lookup (records , dns_resolver , host , port , cqueues_dns_record .A , nil , deadline and deadline - monotime ())
227
230
elseif family == cs .AF_INET then
228
- dns_lookup (records , dns_resolver , host , cqueues_dns_record .A , cqueues_dns_record .A , timeout )
231
+ dns_lookup (records , dns_resolver , host , port , cqueues_dns_record .A , cqueues_dns_record .A , timeout )
229
232
elseif family == cs .AF_INET6 then
230
- dns_lookup (records , dns_resolver , host , cqueues_dns_record .AAAA , cqueues_dns_record .AAAA , timeout )
233
+ dns_lookup (records , dns_resolver , host , port , cqueues_dns_record .AAAA , cqueues_dns_record .AAAA , timeout )
231
234
end
232
235
233
236
return records
@@ -260,7 +263,7 @@ local function connect(options, timeout)
260
263
local connect_params = {
261
264
family = nil ;
262
265
host = nil ;
263
- port = options . port ;
266
+ port = nil ;
264
267
path = nil ;
265
268
bind = bind ;
266
269
sendname = false ;
@@ -274,6 +277,7 @@ local function connect(options, timeout)
274
277
local rec = records [i ]
275
278
connect_params .family = rec .family ;
276
279
connect_params .host = rec .addr ;
280
+ connect_params .port = rec .port ;
277
281
connect_params .path = rec .path ;
278
282
local s
279
283
s , lasterr , lasterrno = ca .fileresult (cs .connect (connect_params ))
0 commit comments