diff --git a/lib/std/posix.zig b/lib/std/posix.zig index 35052ab5791a..d244dad51d10 100644 --- a/lib/std/posix.zig +++ b/lib/std/posix.zig @@ -6479,33 +6479,31 @@ pub const PollError = error{ } || UnexpectedError; pub fn poll(fds: []pollfd, timeout: i32) PollError!usize { + if (native_os == .windows) { + switch (windows.poll(fds.ptr, @intCast(fds.len), timeout)) { + windows.ws2_32.SOCKET_ERROR => switch (windows.ws2_32.WSAGetLastError()) { + .WSANOTINITIALISED => unreachable, + .WSAENETDOWN => return error.NetworkSubsystemFailed, + .WSAENOBUFS => return error.SystemResources, + // TODO: handle more errors + else => |err| return windows.unexpectedWSAError(err), + }, + else => |rc| return @intCast(rc), + } + } while (true) { const fds_count = cast(nfds_t, fds.len) orelse return error.SystemResources; const rc = system.poll(fds.ptr, fds_count, timeout); - if (native_os == .windows) { - if (rc == windows.ws2_32.SOCKET_ERROR) { - switch (windows.ws2_32.WSAGetLastError()) { - .WSANOTINITIALISED => unreachable, - .WSAENETDOWN => return error.NetworkSubsystemFailed, - .WSAENOBUFS => return error.SystemResources, - // TODO: handle more errors - else => |err| return windows.unexpectedWSAError(err), - } - } else { - return @intCast(rc); - } - } else { - switch (errno(rc)) { - .SUCCESS => return @intCast(rc), - .FAULT => unreachable, - .INTR => continue, - .INVAL => unreachable, - .NOMEM => return error.SystemResources, - else => |err| return unexpectedErrno(err), - } + switch (errno(rc)) { + .SUCCESS => return @intCast(rc), + .FAULT => unreachable, + .INTR => continue, + .INVAL => unreachable, + .NOMEM => return error.SystemResources, + else => |err| return unexpectedErrno(err), } - unreachable; } + unreachable; } pub const PPollError = error{