Zig 0.17.0-dev (Split by item) This is an example of documentation generated by
ZigDoc , an alternative to Zig's built-in
Auto Doc feature. See also
examples in other modes/formats . The project being documented here (as the example) is the Zig standard library.
std › Io › Threaded › netAcceptPosix Private Function netAcceptPosix Doc Source Private Function std.Io.Threaded.netAcceptPosix
fn netAcceptPosix (userdata : ?*anyopaque , listen_fd : net .Socket .Handle , options : net .Server .AcceptOptions ) net .Server .AcceptError !net .Socket Params userdata : ?*anyopaque listen_fd : net .Socket .Handle options : net .Server .AcceptOptions File Io/Threaded.zig: 12721
12721
12722
12723
12724
12725
12726
12727
12728
12729
12730
12731
12732
12733
12734
12735
12736
12737
12738
12739
12740
12741
12742
12743
12744
12745
12746
12747
12748
12749
12750
12751
12752
12753
12754
12755
12756
12757
12758
12759
12760
12761
12762
12763
12764
12765
12766
12767
12768 fn netAcceptPosix (userdata : ?*anyopaque , listen_fd : net .Socket .Handle , options : net .Server .AcceptOptions ) net .Server .AcceptError !net .Socket {
if (!have_networking ) return error .NetworkDown ;
const t : *Threaded = @ptrCast (@alignCast (userdata ));
_ = t ;
options ;
var storage : PosixAddress = undefined ;
var addr_len : posix .socklen_t = @sizeOf (PosixAddress );
const syscall : Syscall = try .start ();
const fd = while (true ) {
const rc = if (have_accept4 )
posix .system .accept4 (listen_fd , &storage .any , &addr_len , posix .SOCK .CLOEXEC )
else
posix .system .accept (listen_fd , &storage .any , &addr_len );
switch (posix .errno (rc )) {
.SUCCESS => {
syscall .finish ();
const fd : posix .fd_t = @intCast (rc );
errdefer closeFd (fd );
if (!have_accept4 ) try setCloexec (fd );
break fd ;
},
.INTR => {
try syscall .checkCancel ();
continue ;
},
else => |e | {
syscall .finish ();
switch (e ) {
.AGAIN => |err | return errnoBug (err ),
.BADF => |err | return errnoBug (err ), // File descriptor used after closed.
.CONNABORTED => return error .ConnectionAborted ,
.FAULT => |err | return errnoBug (err ),
.INVAL => return error .SocketNotListening ,
.NOTSOCK => |err | return errnoBug (err ),
.MFILE => return error .ProcessFdQuotaExceeded ,
.NFILE => return error .SystemFdQuotaExceeded ,
.NOBUFS => return error .SystemResources ,
.NOMEM => return error .SystemResources ,
.OPNOTSUPP => |err | return errnoBug (err ),
.PROTO => return error .ProtocolFailure ,
.PERM => return error .BlockedByFirewall ,
else => |err | return posix .unexpectedErrno (err ),
}
},
}
};
return .{ .handle = fd , .address = addressFromPosix (&storage ) };
}