POLLHUP should set the file descriptor's bit in rfds, POLLERR should set it in wfds and rfds (but not xfds), POLLPRI should set it in xfds. As to POLLRDHUP, I guess it should set wfds since writes would always fail with EPIPE and thus not block... but Linux just ignores in its select() code which is a wrapper for poll() like OSv's.
Seriously... What an awesome project, and the C++ code is the nicest I've ever seen! Keep it up!