From d5bd19d471198c0175f2f8875b262b9e13756c25 Mon Sep 17 00:00:00 2001 From: Amilia MacIntyre Date: Fri, 24 Jul 2026 14:22:54 -0400 Subject: [PATCH] std.Io: handle EACCES in calls to `bind` --- lib/std/Io/Kqueue.zig | 1 + lib/std/Io/Threaded.zig | 1 + lib/std/Io/Uring.zig | 1 + lib/std/Io/net.zig | 4 ++++ 4 files changed, 7 insertions(+) diff --git a/lib/std/Io/Kqueue.zig b/lib/std/Io/Kqueue.zig index d34d4132a1a37646303191831a3c050cd579c500..ce339f029f3a9bab3627154658bd53b6af5c14f2 100644 --- a/lib/std/Io/Kqueue.zig +++ b/lib/std/Io/Kqueue.zig @@ -1422,6 +1422,7 @@ fn posixBind( .INTR => continue, .CANCELED => return error.Canceled, + .ACCES => return error.AccessDenied, .ADDRINUSE => return error.AddressInUse, .BADF => |err| return errnoBug(err), // File descriptor used after closed. .INVAL => |err| return errnoBug(err), // invalid parameters diff --git a/lib/std/Io/Threaded.zig b/lib/std/Io/Threaded.zig index 2c48909a6d169d8ed3ddc5cbc385f176a319864a..8f67e78a75516624e4a5beffc3969a50ced92875 100644 --- a/lib/std/Io/Threaded.zig +++ b/lib/std/Io/Threaded.zig @@ -12086,6 +12086,7 @@ fn posixBind( else => |e| { syscall.finish(); switch (e) { + .ACCES => return error.AccessDenied, .ADDRINUSE => return error.AddressInUse, .BADF => |err| return errnoBug(err), // File descriptor used after closed. .INVAL => |err| return errnoBug(err), // invalid parameters diff --git a/lib/std/Io/Uring.zig b/lib/std/Io/Uring.zig index 6edf381378148e64941e64559150f77ad94a0650..d59b2d45b461b03eafaa4ae188bb50819b2a9a2d 100644 --- a/lib/std/Io/Uring.zig +++ b/lib/std/Io/Uring.zig @@ -5298,6 +5298,7 @@ fn bind( switch (cancel_region.errno()) { .SUCCESS => return, .INTR, .CANCELED => {}, + .ACCES => return error.AccessDenied, .ADDRINUSE => return error.AddressInUse, .BADF => |err| return errnoBug(err), // File descriptor used after closed. .INVAL => |err| return errnoBug(err), // invalid parameters diff --git a/lib/std/Io/net.zig b/lib/std/Io/net.zig index d7454a9d5db4d704f29fed8147da260562e3e660..9c2e3d3a693c0cd1f5af53ee610c2a64e36ad4b3 100644 --- a/lib/std/Io/net.zig +++ b/lib/std/Io/net.zig @@ -198,6 +198,8 @@ pub const IpAddress = union(enum) { } pub const ListenError = error{ + /// The address is protected and the current user does not have permission to bind it. + AccessDenied, /// The address is already taken. Can occur when bound port is 0 but /// all ephemeral ports are already in use. AddressInUse, @@ -254,6 +256,8 @@ pub const IpAddress = union(enum) { } pub const BindError = error{ + /// The address is protected and the current user does not have permission to bind it. + AccessDenied, /// The address is already taken. Can occur when bound port is 0 but /// all ephemeral ports are already in use. AddressInUse, -- 2.54.0