epoll реализует алгоритм проверки статуса сокета (есть ли данные на чтение, пуст ли буфер записи и т.д. или же совет просто отвалился), в циклике просто забираете сокеты, чьи статусы поменялись, и, в зависимости от статуса что-то с ними делаете.
Это суть, то есть даже с маленькими пакетами стоит использовать epoll, если у вас много соединений (больше десятка).