zig

fork of https://codeberg.org/ziglang/zig
Log | Files | Refs | README | LICENSE

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:
Mlib/std/os/linux/IoUring/test.zig | 13++++++++++---
Mlib/std/posix.zig | 36------------------------------------
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,