authorgravatar for andrew@ziglang.orgAndrew Kelley <andrew@ziglang.org> 2025-10-16 15:59:20-07:00
committergravatar for andrew@ziglang.orgAndrew Kelley <andrew@ziglang.org> 2025-10-29 06:20:50-07:00
log6336d586614a547a550d6d7055b364ca53775a60
tree4b3245d4d3030a54a0d1815ded612b2f8f9746c7
parentf7bbcb4a4b56925110370d2c28a3eaba3854f88c

std.Io.Threaded: fix getaddrinfo usage


1 files changed, 10 insertions(+), 7 deletions(-)

lib/std/Io/Threaded.zig+10-7
......@@ -2814,7 +2814,7 @@ fn netLookupFallible(
28142814 while (true) {
28152815 try t.checkCancel();
28162816 switch (posix.system.getaddrinfo(name_c.ptr, port_c.ptr, &hints, &res)) {
2817 @as(posix.system.EAI, @enumFromInt(0)) => {},
2817 @as(posix.system.EAI, @enumFromInt(0)) => break,
28182818 .ADDRFAMILY => return error.AddressFamilyUnsupported,
28192819 .AGAIN => return error.NameServerFailure,
28202820 .FAIL => return error.NameServerFailure,
......@@ -2832,10 +2832,11 @@ fn netLookupFallible(
28322832 defer if (res) |some| posix.system.freeaddrinfo(some);
28332833
28342834 var it = res;
2835 var canon_name: ?[]const u8 = null;
2835 var canon_name: ?[*:0]const u8 = null;
28362836 while (it) |info| : (it = info.next) {
28372837 const addr = info.addr orelse continue;
2838 try resolved.putOne(addressFromPosix(addr));
2838 const storage: PosixAddress = .{ .any = addr.* };
2839 try resolved.putOne(t_io, .{ .address = addressFromPosix(&storage) });
28392840
28402841 if (info.canonname) |n| {
28412842 if (canon_name == null) {
......@@ -2844,7 +2845,9 @@ fn netLookupFallible(
28442845 }
28452846 }
28462847 if (canon_name) |n| {
2847 try resolved.putOne(.{ .canonical_name = copyCanon(options.canonical_name_buffer, n) });
2848 try resolved.putOne(t_io, .{
2849 .canonical_name = copyCanon(options.canonical_name_buffer, std.mem.sliceTo(n, 0)),
2850 });
28482851 }
28492852 return;
28502853 }
......@@ -2870,7 +2873,7 @@ fn posixAddressFamily(a: *const IpAddress) posix.sa_family_t {
28702873 };
28712874}
28722875
2873fn addressFromPosix(posix_address: *PosixAddress) IpAddress {
2876fn addressFromPosix(posix_address: *const PosixAddress) IpAddress {
28742877 return switch (posix_address.any.family) {
28752878 posix.AF.INET => .{ .ip4 = address4FromPosix(&posix_address.in) },
28762879 posix.AF.INET6 => .{ .ip6 = address6FromPosix(&posix_address.in6) },
......@@ -2898,14 +2901,14 @@ fn addressUnixToPosix(a: *const net.UnixAddress, storage: *UnixAddress) posix.so
28982901 return @sizeOf(posix.sockaddr.un);
28992902}
29002903
2901fn address4FromPosix(in: *posix.sockaddr.in) net.Ip4Address {
2904fn address4FromPosix(in: *const posix.sockaddr.in) net.Ip4Address {
29022905 return .{
29032906 .port = std.mem.bigToNative(u16, in.port),
29042907 .bytes = @bitCast(in.addr),
29052908 };
29062909}
29072910
2908fn address6FromPosix(in6: *posix.sockaddr.in6) net.Ip6Address {
2911fn address6FromPosix(in6: *const posix.sockaddr.in6) net.Ip6Address {
29092912 return .{
29102913 .port = std.mem.bigToNative(u16, in6.port),
29112914 .bytes = in6.addr,