Ha jol tudom a select() annyiban jobb, hogy minden tipusu filedescriptorral megy amig pl. a poll() es az epoll() nem tud figyelni pl. fileokra. Ez bizonyos esetekben erdekes lehet. Tovabba a select() a leguniverzalisabban elerheto (BSD-n ha jol tudom nincs epoll(), ott kqueue() van). Jo tudnod, hogy bizonyos beagyazott platformokon az epoll nem tamogatott, vagy rosszul mukodik. A select()-et valoban kevesbe skalazhatonak tartjak, de altalaban az az okolszabaly, hogy csak akkor kell mason gondolkodni, ha 10k-nal tobb fd-t akarsz kezelni.
En a helyedben libevent-et (C) vagy asio-t (C++) hasznalnek. Egyfelol mert elrejti az alatta levo API-t, tehat a programod ugyanugy fog kinezni akkor is ha select() ketyeg alatta, es ugyanugy ha epoll() es minden platformon menni fog. Masfelol mert kapsz meg egy halom egyeb nagyon hasznos funkcionalitast.
libevent: http://www.wangafu.net/~nickm/libevent-book/
asio: http://think-async.com/Asio/asio-1.11.0/doc/
Itt nyilvan a szokasos dolgok adodnak: az asio egy brutalisan flexibilis framework (privat velemenyem szerint a legjobban megirt c++ konyvtar), de mivel c++ template-eken alapul ezert a binarisod nagyobb lesz (ha parmegas vegso binaris zavar, akkor inkabb ne ezt valaszd). A libeventel kisebbek lesznek a binarisok, de maga a konyvtar egy kicsit fapadosabb API-t mutat.
Napi szinten hasznaljuk mindkettot a tiedhez nagyon hasonlo problemakra, szoval egyikkel sem fogod megegetni magad.