authorgravatar for andrew@ziglang.orgAndrew Kelley <andrew@ziglang.org> 2026-01-07 14:42:26-08:00
committergravatar for andrew@ziglang.orgAndrew Kelley <andrew@ziglang.org> 2026-01-07 17:33:06-08:00
log55ad03e261712c99d6318b6021cc21304d38ae6b
tree8523e05d8cf936aa0b16f530f56dc41298ce3cd6
parentc89df809b9ae2dd0c36071544aced320120d4a9d

goodbye posix.accept

see #6600

1 files changed, 0 insertions(+), 51 deletions(-)

lib/std/posix.zig-51
......@@ -619,57 +619,6 @@ pub fn socketpair(domain: u32, socket_type: u32, protocol: u32) SocketError![2]s
619619 }
620620}
621621
622pub const AcceptError = std.Io.net.Server.AcceptError;
623
624pub fn accept(
625 sock: socket_t,
626 addr: ?*sockaddr,
627 addr_size: ?*socklen_t,
628 flags: u32,
629) AcceptError!socket_t {
630 const have_accept4 = !(builtin.target.os.tag.isDarwin() or native_os == .windows or native_os == .haiku);
631 assert(0 == (flags & ~@as(u32, SOCK.NONBLOCK | SOCK.CLOEXEC))); // Unsupported flag(s)
632
633 const accepted_sock: socket_t = while (true) {
634 const rc = if (have_accept4)
635 system.accept4(sock, addr, addr_size, flags)
636 else
637 system.accept(sock, addr, addr_size);
638
639 if (native_os == .windows) {
640 @compileError("use std.Io instead");
641 } else {
642 switch (errno(rc)) {
643 .SUCCESS => break @intCast(rc),
644 .INTR => continue,
645 .AGAIN => return error.WouldBlock,
646 .BADF => unreachable, // always a race condition
647 .CONNABORTED => return error.ConnectionAborted,
648 .FAULT => unreachable,
649 .INVAL => return error.SocketNotListening,
650 .NOTSOCK => unreachable,
651 .MFILE => return error.ProcessFdQuotaExceeded,
652 .NFILE => return error.SystemFdQuotaExceeded,
653 .NOBUFS => return error.SystemResources,
654 .NOMEM => return error.SystemResources,
655 .OPNOTSUPP => unreachable,
656 .PROTO => return error.ProtocolFailure,
657 .PERM => return error.BlockedByFirewall,
658 else => |err| return unexpectedErrno(err),
659 }
660 }
661 };
662
663 errdefer switch (native_os) {
664 .windows => windows.closesocket(accepted_sock) catch unreachable,
665 else => close(accepted_sock),
666 };
667 if (!have_accept4) {
668 try setSockFlags(accepted_sock, flags);
669 }
670 return accepted_sock;
671}
672
673622fn setSockFlags(sock: socket_t, flags: u32) !void {
674623 if ((flags & SOCK.CLOEXEC) != 0) {
675624 if (native_os == .windows) {