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