#include <sys/types.h>
#include <sys/event.h>
#include <sys/socket.h>
#include <sys/time.h>

#include <err.h>
#include <errno.h>
#include <fcntl.h>
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <unistd.h>


void
test(int fd)
{
	struct timespec ts;
	struct kevent ke;
	int i, kq;

	kq = kqueue();
	if (kq == -1)
		err(-1, "kqueue");
	EV_SET(&ke, fd, EVFILT_WRITE, EV_ADD, 0, 0, NULL);
	if (kevent(kq, &ke, 1, &ke, 0, NULL) == -1)
		err(-1, "kevent");
	ts.tv_sec = 0;
	ts.tv_nsec = 0;
	i = kevent(kq, NULL, 0, &ke, 1, &ts);
	if (i == -1)
		err(-1, "kevent");
	printf("write: %d\n", i);
	close(kq);


	kq = kqueue();
	if (kq == -1)
		err(-1, "kqueue");
	EV_SET(&ke, fd, EVFILT_READ, EV_ADD, 0, 0, NULL);
	if (kevent(kq, &ke, 1, &ke, 0, NULL) == -1)
		err(-1, "kevent");
	ts.tv_sec = 0;
	ts.tv_nsec = 0;
	i = kevent(kq, NULL, 0, &ke, 1, &ts);
	if (i == -1)
		err(-1, "kevent");
	printf("read: %d\n", i);
	close(kq);
}

int
main(int argc, char *argv[])
{
	int tun;

	tun = open("/dev/tun0", O_RDWR);
	if (tun == -1)
		err(1, "open(/dev/tun)");

	sleep(20);

	test(tun);

	return (0);
}
