




Согласно спецификация, если nfds больше, чем FD_SETSIZE, select() вернет -1 и установит errno в EINVAL.
В некоторых реализациях (в том числе в системах Linux) вместо этого выполняется запись в биты за пределами структуры fd_set, что может привести к повреждению памяти в вашем приложении. (Цель состоит в том, чтобы позволить приложениям использовать более крупные структуры fd_set, но в результате часто возникают сбои приложений, как только они пытаются использовать более 1024 файловых дескрипторов.)
Для работы с более чем 1024 файловыми дескрипторами вам необходимо использовать API, отличный от select(). Эти API-интерфейсы часто зависят от системы; один платформо-независимый вариант, который следует учитывать, - это библиотека либев, которая предоставляет набор полезных абстракций для приложений с высокой степенью параллелизма.
Связанный: stackoverflow.com/q/7976388/694576