authorgravatar for david@vortan.devDavid Rubin <david@vortan.dev> 2025-11-06 10:29:42-08:00
committergravatar for david@vortan.devDavid Rubin <david@vortan.dev> 2025-11-06 17:42:19-08:00
log654a5b20d7a8eb2d4267b859aff615e4806733c2
treedf6e97aaadd6ed477b933718b202962ab7ee1db5
parentb2895f356fa6203d0f3f1476c4e8fb9cf5b6d860
signaturelock-open Commit is signed but in an unrecognized format.

Io: fix compile error in `receive` and `receiveTimeout`

Correctly uses the `netReceive` API. If an error was returned, we propagate that error, otherwise assert we only received one message.

1 files changed, 10 insertions(+), 2 deletions(-)

lib/std/Io/net.zig+10-2
......@@ -1119,7 +1119,13 @@ pub const Socket = struct {
11191119 /// * `receiveTimeout`
11201120 pub fn receive(s: *const Socket, io: Io, buffer: []u8) ReceiveError!IncomingMessage {
11211121 var message: IncomingMessage = undefined;
1122 assert(1 == try io.vtable.netReceive(io.userdata, s.handle, (&message)[0..1], buffer, .{}, .none));
1122 const maybe_err, const count = io.vtable.netReceive(io.userdata, s.handle, (&message)[0..1], buffer, .{}, .none);
1123 if (maybe_err) |err| switch (err) {
1124 // No timeout is passed to `netReceieve`, so it must not return timeout related errors.
1125 error.Timeout, error.UnsupportedClock => unreachable,
1126 else => |e| return e,
1127 };
1128 assert(1 == count);
11231129 return message;
11241130 }
11251131
......@@ -1139,7 +1145,9 @@ pub const Socket = struct {
11391145 timeout: Io.Timeout,
11401146 ) ReceiveTimeoutError!IncomingMessage {
11411147 var message: IncomingMessage = undefined;
1142 assert(1 == try io.vtable.netReceive(io.userdata, s.handle, (&message)[0..1], buffer, .{}, timeout));
1148 const maybe_err, const count = io.vtable.netReceive(io.userdata, s.handle, (&message)[0..1], buffer, .{}, timeout);
1149 if (maybe_err) |err| return err;
1150 assert(1 == count);
11431151 return message;
11441152 }
11451153