Это определенно просто глупое недоразумение с моей стороны, но страница man для select () гласит:
Аргумент timeout указывает интервал, который select () должен блокировать в ожидании файлового дескриптора. быть готовым Вызов будет блокироваться до тех пор, пока:
* дескриптор файла не станет готовым;
* вызов прерван обработчиком сигнала; или
* истекло время ожидания.
И, кроме того,
В случае успеха select () и pselect () возвращают количество файловых дескрипторов содержится в трех возвращенных наборах дескрипторов (то есть общем количестве битов, которые установлены в readfds, writefds, кроме fds), которые могут быть равны нулю, если время ожидания истекает до того, как произойдет что-либо интересное. При ошибке возвращается -1, а errno устанавливается для указания ошибки; наборы файловых дескрипторов не изменяются, и время ожидания становится неопределенным.
Поэтому мой вопрос - если он прекратит блокировку, как только файловый дескриптор будет готов, не вернется ли он сразу 1? И если ни один fds не будет готов, он возвращает 0, в противном случае ошибка и возвращает -1.
Очевидно, что на практике он возвращает больше 1: весь смысл в том, что вы должны иметь возможность читать / записывать несколько fds, верно