Use some standard library like libevent
After a skim of the internet, the choice of libevent vs libev is firmly decided towards libev. Libev is a an attempt at improving upon libevent by simplifying what goes on behind the scenes and fixing bugs. By going with libev we lose good Windows support, some thread safety stuff, and extras such as events specifically for SSL, http, or DNS, none of which we care about. What we gain with libev is that it's smaller, faster, and has a cleaner API (or at least it's argued so by random people on the internet).
There is possibly a third option: libuv. It was started by the node.js guys as a platform independent wrapper for libev but has since removed the libev dependency. It also has added extras that libuv didn't include like special events for TCP or DNS. So it has added cruft, but they do claim a performance improvement over libev which is really most of what we care about, but I'm not sure how much to believe them. I may try to test this later.
My feeling is that libev is the right choice unless libuv turns out to be really super. Either way their APIs are similar so if we do decide to change half way through it shouldn't be too difficult.
Elderberry2 Implements libev