Если сокет не является блокирующим, это похоже на ожидаемое поведение.Страница справочника для select имеет следующее: аргумент readfds:
Перечисленные в readfds будут отслеживаться, чтобы увидеть, станут ли символы доступными для чтения (точнее, посмотреть, не заблокирует ли чтение чтение).; в частности, файловый дескриптор также готов к концу файла)
Поскольку сокет не является блокирующим, верно, что чтение не будет блокировать, и, следовательно, разумно для этого битабыть установленным.
Это не должно вызывать проблем, потому что если вы попытаетесь прочитать из сокета, вы просто ничего не получите, и чтение не будет блокироваться.
Как правило,thumb, всякий раз, когда select возвращает, вы должны обрабатывать каждый сокет, который он указывает, готов, либо считывая и обрабатывая любые доступные данные, если он возвращается как готовый к чтению, или записывая больше данных, если он возвращается как готовый к записи.Вы не должны предполагать, что при каждом возврате будет сигнализироваться только одно событие.