diff options
| author | Andrew Kelley <andrew@ziglang.org> | 2025-10-23 20:33:34 -0700 |
|---|---|---|
| committer | Andrew Kelley <andrew@ziglang.org> | 2025-10-29 06:20:51 -0700 |
| commit | ecdc00466c34424ec8467d05efe0421f868c739a (patch) | |
| tree | 69c4874db516beacd20388640ab70314ac92a433 /lib/std | |
| parent | c87fbd58787823da6db48e0bc488b5344fe52d43 (diff) | |
| download | zig-ecdc00466c34424ec8467d05efe0421f868c739a.tar.gz zig-ecdc00466c34424ec8467d05efe0421f868c739a.zip | |
std.Io.net: make it easier to use netReceiveMany correctly
Diffstat (limited to 'lib/std')
| -rw-r--r-- | lib/std/Io/Threaded.zig | 2 | ||||
| -rw-r--r-- | lib/std/Io/net.zig | 12 |
2 files changed, 12 insertions, 2 deletions
diff --git a/lib/std/Io/Threaded.zig b/lib/std/Io/Threaded.zig index be9803adbf..bbbb6a03eb 100644 --- a/lib/std/Io/Threaded.zig +++ b/lib/std/Io/Threaded.zig @@ -5009,7 +5009,7 @@ fn lookupDns( } }; while (true) { - var message_buffer: [max_messages]Io.net.IncomingMessage = undefined; + var message_buffer: [max_messages]Io.net.IncomingMessage = @splat(.init); const buf = answer_buffer[answer_buffer_i..]; const recv_err, const recv_n = socket.receiveManyTimeout(t_io, &message_buffer, buf, .{}, timeout); for (message_buffer[0..recv_n]) |*received_message| { diff --git a/lib/std/Io/net.zig b/lib/std/Io/net.zig index fc7482f7cb..362ff424a8 100644 --- a/lib/std/Io/net.zig +++ b/lib/std/Io/net.zig @@ -904,10 +904,18 @@ pub const IncomingMessage = struct { data: []u8, /// Supplied by caller before calling receive functions; mutated by receive /// functions. - control: []u8 = &.{}, + control: []u8, /// Populated by receive functions. flags: Flags, + /// Useful for initializing before calling `receiveManyTimeout`. + pub const init: IncomingMessage = .{ + .from = undefined, + .data = undefined, + .control = &.{}, + .flags = undefined, + }; + pub const Flags = packed struct(u8) { /// indicates end-of-record; the data returned completed a record /// (generally used with sockets of type SOCK_SEQPACKET). @@ -1146,6 +1154,8 @@ pub const Socket = struct { pub fn receiveManyTimeout( s: *const Socket, io: Io, + /// Function assumes each element has initialized `control` field. + /// Initializing with `IncomingMessage.init` may be helpful. message_buffer: []IncomingMessage, data_buffer: []u8, flags: ReceiveFlags, |
