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(...@@ -2814,7 +2814,7 @@ fn netLookupFallible(
2814 while (true) {2814 while (true) {
2815 try t.checkCancel();2815 try t.checkCancel();
2816 switch (posix.system.getaddrinfo(name_c.ptr, port_c.ptr, &hints, &res)) {2816 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,
2818 .ADDRFAMILY => return error.AddressFamilyUnsupported,2818 .ADDRFAMILY => return error.AddressFamilyUnsupported,
2819 .AGAIN => return error.NameServerFailure,2819 .AGAIN => return error.NameServerFailure,
2820 .FAIL => return error.NameServerFailure,2820 .FAIL => return error.NameServerFailure,
...@@ -2832,10 +2832,11 @@ fn netLookupFallible(...@@ -2832,10 +2832,11 @@ fn netLookupFallible(
2832 defer if (res) |some| posix.system.freeaddrinfo(some);2832 defer if (res) |some| posix.system.freeaddrinfo(some);
28332833
2834 var it = res;2834 var it = res;
2835 var canon_name: ?[]const u8 = null;2835 var canon_name: ?[*:0]const u8 = null;
2836 while (it) |info| : (it = info.next) {2836 while (it) |info| : (it = info.next) {
2837 const addr = info.addr orelse continue;2837 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
2840 if (info.canonname) |n| {2841 if (info.canonname) |n| {
2841 if (canon_name == null) {2842 if (canon_name == null) {
...@@ -2844,7 +2845,9 @@ fn netLookupFallible(...@@ -2844,7 +2845,9 @@ fn netLookupFallible(
2844 }2845 }
2845 }2846 }
2846 if (canon_name) |n| {2847 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 });
2848 }2851 }
2849 return;2852 return;
2850 }2853 }
...@@ -2870,7 +2873,7 @@ fn posixAddressFamily(a: *const IpAddress) posix.sa_family_t {...@@ -2870,7 +2873,7 @@ fn posixAddressFamily(a: *const IpAddress) posix.sa_family_t {
2870 };2873 };
2871}2874}
28722875
2873fn addressFromPosix(posix_address: *PosixAddress) IpAddress {2876fn addressFromPosix(posix_address: *const PosixAddress) IpAddress {
2874 return switch (posix_address.any.family) {2877 return switch (posix_address.any.family) {
2875 posix.AF.INET => .{ .ip4 = address4FromPosix(&posix_address.in) },2878 posix.AF.INET => .{ .ip4 = address4FromPosix(&posix_address.in) },
2876 posix.AF.INET6 => .{ .ip6 = address6FromPosix(&posix_address.in6) },2879 posix.AF.INET6 => .{ .ip6 = address6FromPosix(&posix_address.in6) },
...@@ -2898,14 +2901,14 @@ fn addressUnixToPosix(a: *const net.UnixAddress, storage: *UnixAddress) posix.so...@@ -2898,14 +2901,14 @@ fn addressUnixToPosix(a: *const net.UnixAddress, storage: *UnixAddress) posix.so
2898 return @sizeOf(posix.sockaddr.un);2901 return @sizeOf(posix.sockaddr.un);
2899}2902}
29002903
2901fn address4FromPosix(in: *posix.sockaddr.in) net.Ip4Address {2904fn address4FromPosix(in: *const posix.sockaddr.in) net.Ip4Address {
2902 return .{2905 return .{
2903 .port = std.mem.bigToNative(u16, in.port),2906 .port = std.mem.bigToNative(u16, in.port),
2904 .bytes = @bitCast(in.addr),2907 .bytes = @bitCast(in.addr),
2905 };2908 };
2906}2909}
29072910
2908fn address6FromPosix(in6: *posix.sockaddr.in6) net.Ip6Address {2911fn address6FromPosix(in6: *const posix.sockaddr.in6) net.Ip6Address {
2909 return .{2912 return .{
2910 .port = std.mem.bigToNative(u16, in6.port),2913 .port = std.mem.bigToNative(u16, in6.port),
2911 .bytes = in6.addr,2914 .bytes = in6.addr,