I think direct epoll usage will be good decision.

FYI
I found async framework on code.dlang: https://github.com/ikod/fio
It uses epoll and implements custom event loop over it.