| include(CheckCSourceRuns) |
| |
| check_c_source_runs( |
| " |
| #include <sys/types.h> |
| #include <sys/time.h> |
| #include <sys/event.h> |
| #include <stdio.h> |
| #include <unistd.h> |
| #include <fcntl.h> |
| |
| int |
| main(int argc, char **argv) |
| { |
| int kq; |
| int n; |
| int fd[2]; |
| struct kevent ev; |
| struct timespec ts; |
| char buf[80000]; |
| |
| if (pipe(fd) == -1) |
| exit(1); |
| if (fcntl(fd[1], F_SETFL, O_NONBLOCK) == -1) |
| exit(1); |
| |
| while ((n = write(fd[1], buf, sizeof(buf))) == sizeof(buf)) |
| ; |
| |
| if ((kq = kqueue()) == -1) |
| exit(1); |
| |
| memset(&ev, 0, sizeof(ev)); |
| ev.ident = fd[1]; |
| ev.filter = EVFILT_WRITE; |
| ev.flags = EV_ADD | EV_ENABLE; |
| n = kevent(kq, &ev, 1, NULL, 0, NULL); |
| if (n == -1) |
| exit(1); |
| |
| read(fd[0], buf, sizeof(buf)); |
| |
| ts.tv_sec = 0; |
| ts.tv_nsec = 0; |
| n = kevent(kq, NULL, 0, &ev, 1, &ts); |
| if (n == -1 || n == 0) |
| exit(1); |
| |
| exit(0); |
| } |
| |
| " EVENT__HAVE_WORKING_KQUEUE) |