наборах дескрипторов, причем это количество может быть равным нулю, если
таймаут истекает, а интересующие нас события так и не произошли. При ошибке возвращается -1, а errno устанавливается должным образом; наборы дескрипторов и значение timeout становятся неопределены, поэтому при ошибке нельзя полагаться на их значение.
ОШИБКИ
EBADF В одном из наборов находится неверный файловый дескриптор.
EINTR Был пойман незаблокированный сигнал.
EINVAL n отрицательно.
ENOMEM Функция select не смогла выделить участок памяти для внутренних таблиц.
ЗАМЕЧАНИЕ
В некоторых программах select вызывается с тремя пустыми наборами файлов, n равным нулю, и ненулевым значением timeout, что является довольно переносимым способом сделать задержку с миллисекундной точностью.
Под Linux timeout изменяется, чтобы сообщить количество времени, которое не было использовано; большинство других реализаций не делают этого. Это приводит к проблемам как в коде под Linux, который читает значение timeout и переносится в другие операционные системы, так и когда код переносится под Linux и использует при этом struct timeval для нескольких функций select в цикле без повторной инициализации. Считайте, что параметр timeout неопределен после возврата из функции select.
Однопотоковые псевдопараллельные серверы