Я читаю поток данных через сокет TCP/IP. Нагрузка потока очень неравномерна. Иногда большие объемы данных поступают каждую секунду, иногда данные не поступают в течение часа. В случае длительного периода бездействия (никаких данных с удаленного сервера, но соединение все еще в сети) моя программа должна предпринять некоторые действия.
Я использую тайм-аут, используя select(). Это говорит мне, есть ли готовые данные, но я точно не знаю, сколько я могу прочитать, не вызывая блокировку read(). Блокировка неприемлема, поскольку она может длиться намного дольше, чем требуемый тайм-аут.
Для эффективности поток считывается в большой буфер, а вызов read() предоставляется с этим размером буфера.
Будет ли блок read() после select(), если заполняемый буфер больше, чем объем данных, доступных прямо сейчас в сокете?