diff --git a/lib/std/Io/net.zig b/lib/std/Io/net.zig index b691b1501ef4..ee1e93ced21d 100644 --- a/lib/std/Io/net.zig +++ b/lib/std/Io/net.zig @@ -1118,8 +1118,14 @@ pub const Socket = struct { /// See also: /// * `receiveTimeout` pub fn receive(s: *const Socket, io: Io, buffer: []u8) ReceiveError!IncomingMessage { - var message: IncomingMessage = undefined; - assert(1 == try io.vtable.netReceive(io.userdata, s.handle, (&message)[0..1], buffer, .{}, .none)); + var message: IncomingMessage = .init; + const maybe_err, const count = io.vtable.netReceive(io.userdata, s.handle, (&message)[0..1], buffer, .{}, .none); + if (maybe_err) |err| switch (err) { + // No timeout is passed to `netReceieve`, so it must not return timeout related errors. + error.Timeout, error.UnsupportedClock => unreachable, + else => |e| return e, + }; + assert(1 == count); return message; } @@ -1138,8 +1144,10 @@ pub const Socket = struct { buffer: []u8, timeout: Io.Timeout, ) ReceiveTimeoutError!IncomingMessage { - var message: IncomingMessage = undefined; - assert(1 == try io.vtable.netReceive(io.userdata, s.handle, (&message)[0..1], buffer, .{}, timeout)); + var message: IncomingMessage = .init; + const maybe_err, const count = io.vtable.netReceive(io.userdata, s.handle, (&message)[0..1], buffer, .{}, timeout); + if (maybe_err) |err| return err; + assert(1 == count); return message; }