feature. See also
. The project being documented here (as the example) is the Zig library itself.
Uring.setsockopt
fn setsockopt(
ev: *Evented,
cancel_region: *CancelRegion,
fd: fd_t,
level: i32,
opt_name: u32,
option: u32,
) !void
File
Code
fn setsockopt(
ev: *Evented,
cancel_region: *CancelRegion,
fd: fd_t,
level: i32,
opt_name: u32,
option: u32,
) !void {
const o: []const u8 = @ptrCast(&option);
while (true) {
const off: extern struct {
cmd_op: linux.IO_URING_SOCKET_OP,
pad: u32,
} align(@alignOf(u64)) = .{
.cmd_op = .SETSOCKOPT,
.pad = 0,
};
const addr: extern struct { level: i32, opt_name: u32 } align(@alignOf(u64)) = .{
.level = level,
.opt_name = opt_name,
};
const thread = try cancel_region.awaitIoUring();
thread.enqueue().* = .{
.opcode = .URING_CMD,
.flags = 0,
.ioprio = 0,
.fd = fd,
.off = @as(*const u64, @ptrCast(&off)).*,
.addr = @as(*const u64, @ptrCast(&addr)).*,
.len = 0,
.rw_flags = 0,
.user_data = @intFromPtr(cancel_region.fiber),
.buf_index = 0,
.personality = 0,
.splice_fd_in = @intCast(o.len),
.addr3 = @intFromPtr(o.ptr),
.resv = 0,
};
ev.yield(null, .nothing);
switch (cancel_region.errno()) {
.SUCCESS => return,
.INTR, .CANCELED => {},
.BADF => |err| return errnoBug(err),
.NOTSOCK => |err| return errnoBug(err),
.INVAL => |err| return errnoBug(err),
.FAULT => |err| return errnoBug(err),
else => |err| return unexpectedErrno(err),
}
}
}