А почему select это костыль? Ну не было сначала осознания что надо сначала залить все 10к сокетов в ядро, а потом бахнуть epoll без параметров, вот и вливали весь список сокетов на каждый вызов select. Раньше были другие реалии, и до epoll просто не доросли. Это как с трёхмерной графикой, сначала OpenGL стал революцией, а теперь надо вулкан, потому что опенгл прибит гвоздями к определённому классу задач и делает много чего такого чего не очень нужно, точнее нужно но только ради этого самого опенгла. Аналогичная история, поняли что надо чуть иначе и запилили вулкан. Как во времена select никто не предвидел нужность epoll, так и во времена опенгл никто не предвидел вулкан. То же самое с железом, сейчас ни одна микросхема там не работает синхронно, есть входной поток, есть выходной, и они не синхронизируются для большого thoroughput, как бы обходя стороной большой latency.