Каково поведение функции select(2)
, когда файловый дескриптор, который он просматривает для чтения, закрывается другим потоком?
Из некоторого беглого тестирования он сразу же возвращается. Я подозреваю, что результатом является либо то, что (а) он все еще продолжает ждать данных, но если вы на самом деле пытались его прочитать, вы получите EBADF (возможно, там потенциальная гонка) или (б), что он делает вид, будто дескриптор файла никогда не передавался. Если последний случай истинен, то передача в одном fd без таймаута может привести к тупиковой ситуации, если он был закрыт.