Сама проблема выражается в том, что не ставится EV_EOF. Тестовая
программка прилагается. Она создаёт socketpair(), после чего
пишет в один из сокетов, и заводит kqueue смотреть за вторым.
Ожидаемое поведение: первый вызов kevent() возвращает EV_EOF, т.к.
сокет с той стороны уже закрыт, тест завершается. Именно такое
поведение наблюдается на FreeBSD и NetBSD.
На DragonFly BSD EV_EOF не ставится, вызывается второй kevent() и
ожидаемо виснет (потому как новых событий не происходит, а
используется EV_CLEAR).
Feel free to report this to DragonFly BSD folks.