commit 4a49546f59db2f90f6f4caaae1e9abccba5f6600 (tree)
parent ed4dfdcff0d3affb950f5277c2303407d002135a
Author: Andrew Kelley <andrew@ziglang.org>
Date: Wed, 7 Jan 2026 14:40:18 -0800
goodbye posix.bind
see #6600
Diffstat:
2 files changed, 10 insertions(+), 39 deletions(-)
diff --git a/lib/std/os/linux/IoUring/test.zig b/lib/std/os/linux/IoUring/test.zig
@@ -533,7 +533,7 @@ test "sendmsg/recvmsg" {
defer posix.close(server);
try posix.setsockopt(server, posix.SOL.SOCKET, posix.SO.REUSEPORT, &mem.toBytes(@as(c_int, 1)));
try posix.setsockopt(server, posix.SOL.SOCKET, posix.SO.REUSEADDR, &mem.toBytes(@as(c_int, 1)));
- try posix.bind(server, addrAny(&address_server), @sizeOf(linux.sockaddr.in));
+ try bind(server, addrAny(&address_server), @sizeOf(linux.sockaddr.in));
// set address_server to the OS-chosen IP/port.
var slen: posix.socklen_t = @sizeOf(linux.sockaddr.in);
@@ -1036,7 +1036,7 @@ test "shutdown" {
const server = try socket(address.family, posix.SOCK.STREAM | posix.SOCK.CLOEXEC, 0);
defer posix.close(server);
try posix.setsockopt(server, posix.SOL.SOCKET, posix.SO.REUSEADDR, &mem.toBytes(@as(c_int, 1)));
- try posix.bind(server, addrAny(&address), @sizeOf(linux.sockaddr.in));
+ try bind(server, addrAny(&address), @sizeOf(linux.sockaddr.in));
try posix.listen(server, 1);
// set address to the OS-chosen IP/port.
@@ -2661,7 +2661,7 @@ fn createListenerSocket(address: *linux.sockaddr.in) !posix.socket_t {
errdefer posix.close(listener_socket);
try posix.setsockopt(listener_socket, posix.SOL.SOCKET, posix.SO.REUSEADDR, &mem.toBytes(@as(c_int, 1)));
- try posix.bind(listener_socket, addrAny(address), @sizeOf(linux.sockaddr.in));
+ try bind(listener_socket, addrAny(address), @sizeOf(linux.sockaddr.in));
try posix.listen(listener_socket, kernel_backlog);
// set address to the OS-chosen IP/port.
@@ -2703,3 +2703,10 @@ fn socket(domain: u32, socket_type: u32, protocol: u32) !posix.socket_t {
else => return error.SocketCreationFailure,
}
}
+
+fn bind(sock: posix.socket_t, addr: *const posix.sockaddr, len: posix.socklen_t) !void {
+ switch (posix.errno(posix.system.bind(sock, addr, len))) {
+ .SUCCESS => return,
+ else => return error.BindFailure,
+ }
+}
diff --git a/lib/std/posix.zig b/lib/std/posix.zig
@@ -619,42 +619,6 @@ pub fn socketpair(domain: u32, socket_type: u32, protocol: u32) SocketError![2]s
}
}
-pub const BindError = error{
- SymLinkLoop,
- NameTooLong,
- FileNotFound,
- NotDir,
- ReadOnlyFileSystem,
- AccessDenied,
-} || std.Io.net.IpAddress.BindError;
-
-pub fn bind(sock: socket_t, addr: *const sockaddr, len: socklen_t) BindError!void {
- if (native_os == .windows) {
- @compileError("use std.Io instead");
- } else {
- const rc = system.bind(sock, addr, len);
- switch (errno(rc)) {
- .SUCCESS => return,
- .ACCES, .PERM => return error.AccessDenied,
- .ADDRINUSE => return error.AddressInUse,
- .BADF => unreachable, // always a race condition if this error is returned
- .INVAL => unreachable, // invalid parameters
- .NOTSOCK => unreachable, // invalid `sockfd`
- .AFNOSUPPORT => return error.AddressFamilyUnsupported,
- .ADDRNOTAVAIL => return error.AddressUnavailable,
- .FAULT => unreachable, // invalid `addr` pointer
- .LOOP => return error.SymLinkLoop,
- .NAMETOOLONG => return error.NameTooLong,
- .NOENT => return error.FileNotFound,
- .NOMEM => return error.SystemResources,
- .NOTDIR => return error.NotDir,
- .ROFS => return error.ReadOnlyFileSystem,
- else => |err| return unexpectedErrno(err),
- }
- }
- unreachable;
-}
-
pub const ListenError = error{
FileDescriptorNotASocket,
OperationUnsupported,