internal static unsafe EPollEvent[] PollEvents(EPoll epoll, int maxEvents, int timeout) { bool isPackedEvents = EPoll.PackedEvents; EPollEvent * events = stackalloc EPollEvent[isPackedEvents ? 0 : maxEvents]; EPollEventPacked *packedEvents = stackalloc EPollEventPacked[isPackedEvents ? maxEvents : 0]; int nrEvents = epoll.Wait(events != null ? (void *)events : (void *)packedEvents, maxEvents, timeout); var retval = new EPollEvent[nrEvents]; for (int i = 0; i < nrEvents; i++) { retval[i].Events = isPackedEvents ? packedEvents[i].Events : events[i].Events; retval[i].Data = isPackedEvents ? packedEvents[i].Data : events[i].Data; } return(retval); }
internal extern static int EPollControl(EPollHandle __epfd, EPollCommand __op, FileDescriptor __fd, ref EPollEvent __event);
private static extern int epoll_ctl(int epfd, int op, int fd, ref EPollEvent evt);
internal extern static int EPollWait(EPollHandle __epfd, ref EPollEvent __events, int __maxevents, int __timeout);