feature. See also
. The project being documented here (as the example) is the Zig library itself.
Threaded.netSendOneWindows
fn netSendOneWindows(
t: *Threaded,
socket_handle: net.Socket.Handle,
message: *net.OutgoingMessage,
flags: net.SendFlags,
) net.Socket.SendError!void
File
Code
fn netSendOneWindows(
t: *Threaded,
socket_handle: net.Socket.Handle,
message: *net.OutgoingMessage,
flags: net.SendFlags,
) net.Socket.SendError!void {
_ = t;
_ = flags;
const iovecs: [1]windows.AFD.WSABUF(.@"const") = .{.{
.buf = message.data_ptr,
.len = std.math.cast(std.os.windows.ULONG, message.data_len) orelse
return error.MessageOversize,
}};
var storage: PosixAddress = undefined;
const addr_len = addressToPosix(message.address, &storage);
switch ((try deviceIoControl(&.{
.file = .{ .handle = socket_handle, .flags = .{ .nonblocking = true } },
.code = windows.IOCTL.AFD.SEND_DATAGRAM,
.in = @ptrCast(&windows.AFD.SEND_DATAGRAM_INFO{
.BufferArray = &iovecs,
.BufferCount = iovecs.len,
.AfdFlags = .{ .NO_FAST_IO = true, .OVERLAPPED = true },
.TdiRequest = undefined,
.TdiConnInfo = .{
.UserDataLength = undefined,
.UserData = undefined,
.OptionsLength = undefined,
.Options = undefined,
.RemoteAddressLength = @bitCast(addr_len),
.RemoteAddress = &storage,
},
}),
})).u.Status) {
.SUCCESS => return,
.CANCELLED => unreachable,
.INSUFFICIENT_RESOURCES => return error.SystemResources,
else => |status| return windows.unexpectedStatus(status),
}
}