std.Io.net.HostName: fix connectMany not running DNS async

This commit is contained in:
Andrew Kelley 2025-10-16 16:02:35 -07:00
parent 6336d58661
commit f14c4c3db8

View file

@ -268,20 +268,20 @@ pub fn connectMany(
var canonical_name_buffer: [max_len]u8 = undefined; var canonical_name_buffer: [max_len]u8 = undefined;
var lookup_buffer: [32]HostName.LookupResult = undefined; var lookup_buffer: [32]HostName.LookupResult = undefined;
var lookup_queue: Io.Queue(LookupResult) = .init(&lookup_buffer); var lookup_queue: Io.Queue(LookupResult) = .init(&lookup_buffer);
var group: Io.Group = .init;
host_name.lookup(io, &lookup_queue, .{ group.async(io, lookup, .{ host_name, io, &lookup_queue, .{
.port = port, .port = port,
.canonical_name_buffer = &canonical_name_buffer, .canonical_name_buffer = &canonical_name_buffer,
}); } });
var group: Io.Group = .init;
while (lookup_queue.getOne(io)) |dns_result| switch (dns_result) { while (lookup_queue.getOne(io)) |dns_result| switch (dns_result) {
.address => |address| group.async(io, enqueueConnection, .{ address, io, results, options }), .address => |address| group.async(io, enqueueConnection, .{ address, io, results, options }),
.canonical_name => continue, .canonical_name => continue,
.end => |lookup_result| { .end => |lookup_result| {
group.waitUncancelable(io); results.putOneUncancelable(io, .{
results.putOneUncancelable(io, .{ .end = lookup_result }); .end = if (group.wait(io)) lookup_result else |err| err,
});
return; return;
}, },
} else |err| switch (err) { } else |err| switch (err) {
@ -409,7 +409,7 @@ test ResolvConf {
\\# Generated by resolvconf \\# Generated by resolvconf
\\nameserver 1.0.0.1 \\nameserver 1.0.0.1
\\nameserver 1.1.1.1 \\nameserver 1.1.1.1
\\nameserver fe80::e0e:76ff:fed4:cf22%eno1 \\nameserver fe80::e0e:76ff:fed4:cf22
\\options edns0 \\options edns0
\\ \\
; ;