31
First of all, poll(2) is only level-triggered, but epoll(4) can be used as either edge- or level-triggered interface.
Now complexity: poll complexity regarding number of watched descriptors (fds) is O(n) as it scans all the fds every time when a 'ready' event occurs, epoll is basically O(1) as it doesn't do the linear scan over all the watched descriptors.
In terms of portability - as epoll is Linux-specific I would suggest checking out libev and libevent libraries.
Also, check out Dan Kegel's excellent writeup: "The C10K problem".