Что происходит, когда вы вызываете read () (или recv ()) для открытого сокета, и вы указываете длину, которая больше числа байтов, готовых для чтения в буфере (TCP), или длины следующего датаграмма (UDP)?
В обоих случаях, если размер буфера больше, чем объем доступных данных, доступные данные считываются, и число фактически прочитанных байтов возвращается из функции. Это возвращаемое значение - то, что вы должны использовать при работе с данными.