My previous attempt to fix this just hit the wrong variable to fix edge triggering; it should have reset the POLLOUT bit in ospoll->osfds[pos].revents instead of ospoll->fds[pos].revents. With that fixed, it looks like the poll(2) path is working.