Linux has epoll, BSDs have kqueue, and the #Hurd has... well, neither, nor is there any replacement.
There of course are select & poll, but they work differently: with poll/select, the calls themselves block until an event occurs, whereas epoll/kqueue let you create a new fd and then wait on it. This makes them composable, so you can nest event loops, even between processes.
So for the past few days, in between finals, I've been writing a little epoll server for the Hurd; today it finally started working.