xref: /src/contrib/ntp/sntp/libevent/cmake/CheckWorkingKqueue.cmake (revision a466cc55373fc3cf86837f09da729535b57e69a1)
126fd3d56SCy Schubertinclude(CheckCSourceRuns)
226fd3d56SCy Schubert
326fd3d56SCy Schubertcheck_c_source_runs(
426fd3d56SCy Schubert"
526fd3d56SCy Schubert#include <sys/types.h>
626fd3d56SCy Schubert#include <sys/time.h>
726fd3d56SCy Schubert#include <sys/event.h>
826fd3d56SCy Schubert#include <stdio.h>
926fd3d56SCy Schubert#include <unistd.h>
1026fd3d56SCy Schubert#include <fcntl.h>
1126fd3d56SCy Schubert
1226fd3d56SCy Schubertint
1326fd3d56SCy Schubertmain(int argc, char **argv)
1426fd3d56SCy Schubert{
1526fd3d56SCy Schubert    int kq;
1626fd3d56SCy Schubert    int n;
1726fd3d56SCy Schubert    int fd[2];
1826fd3d56SCy Schubert    struct kevent ev;
1926fd3d56SCy Schubert    struct timespec ts;
2026fd3d56SCy Schubert    char buf[80000];
2126fd3d56SCy Schubert
2226fd3d56SCy Schubert    if (pipe(fd) == -1)
2326fd3d56SCy Schubert        exit(1);
2426fd3d56SCy Schubert    if (fcntl(fd[1], F_SETFL, O_NONBLOCK) == -1)
2526fd3d56SCy Schubert        exit(1);
2626fd3d56SCy Schubert
2726fd3d56SCy Schubert    while ((n = write(fd[1], buf, sizeof(buf))) == sizeof(buf))
2826fd3d56SCy Schubert        ;
2926fd3d56SCy Schubert
3026fd3d56SCy Schubert    if ((kq = kqueue()) == -1)
3126fd3d56SCy Schubert        exit(1);
3226fd3d56SCy Schubert
3326fd3d56SCy Schubert    memset(&ev, 0, sizeof(ev));
3426fd3d56SCy Schubert    ev.ident = fd[1];
3526fd3d56SCy Schubert    ev.filter = EVFILT_WRITE;
3626fd3d56SCy Schubert    ev.flags = EV_ADD | EV_ENABLE;
3726fd3d56SCy Schubert    n = kevent(kq, &ev, 1, NULL, 0, NULL);
3826fd3d56SCy Schubert    if (n == -1)
3926fd3d56SCy Schubert        exit(1);
4026fd3d56SCy Schubert
4126fd3d56SCy Schubert    read(fd[0], buf, sizeof(buf));
4226fd3d56SCy Schubert
4326fd3d56SCy Schubert    ts.tv_sec = 0;
4426fd3d56SCy Schubert    ts.tv_nsec = 0;
4526fd3d56SCy Schubert    n = kevent(kq, NULL, 0, &ev, 1, &ts);
4626fd3d56SCy Schubert    if (n == -1 || n == 0)
4726fd3d56SCy Schubert        exit(1);
4826fd3d56SCy Schubert
4926fd3d56SCy Schubert    exit(0);
5026fd3d56SCy Schubert}
5126fd3d56SCy Schubert
5226fd3d56SCy Schubert" EVENT__HAVE_WORKING_KQUEUE)
53