| ... | ... | @@ -1456,7 +1456,25 @@ fn netRead(userdata: ?*anyopaque, fd: net.Socket.Handle, data: [][]u8) net.Strea |
| 1456 | 1456 | .SUCCESS => return @intCast(rc), |
| 1457 | 1457 | .INTR => continue, |
| 1458 | 1458 | .CANCELED => return error.Canceled, |
| 1459 | | .AGAIN => @panic("TODO"), |
| 1459 | .AGAIN => { |
| 1460 | const thread: *Thread = .current(); |
| 1461 | const fiber = thread.currentFiber(); |
| 1462 | const changes = [_]posix.Kevent{ |
| 1463 | .{ |
| 1464 | .ident = @as(u32, @bitCast(fd)), |
| 1465 | .filter = std.c.EVFILT.READ, |
| 1466 | .flags = std.c.EV.ADD | std.c.EV.ONESHOT, |
| 1467 | .fflags = 0, |
| 1468 | .data = 0, |
| 1469 | .udata = @intFromPtr(fiber), |
| 1470 | }, |
| 1471 | }; |
| 1472 | assert(0 == (posix.kevent(thread.kq_fd, &changes, &.{}, null) catch |err| { |
| 1473 | @panic(@errorName(err)); // TODO |
| 1474 | })); |
| 1475 | yield(k, null, .nothing); |
| 1476 | continue; |
| 1477 | }, |
| 1460 | 1478 | |
| 1461 | 1479 | .INVAL => |err| return errnoBug(err), |
| 1462 | 1480 | .FAULT => |err| return errnoBug(err), |