Поскольку len
относится к типу size_t
, его максимальный размер определяется как SIZE_MAX
. Стандарт C определяет, что SIZE_MAX должен быть не менее 65535. Однако верхняя граница отсутствует, поэтому его фактическое значение зависит от компилятора.
size_t
и SIZE_MAX
определены в <stdint.h>
.
Что произойдет, если будет больше байтов, чем указано len
, зависит от типа сокета.
Если у вас есть сокет TCP (типа SOCK_STREAM
), если ожидающих чтения байтов больше, чем значение len
, они будут прочитаны при следующем вызове recv()
.
Однако, если ваш сокет имеет тип SOCK_DGRAM
( UDP socket) вызов recvfrom()
всегда будет читать всю дейтаграмму. Если длина дейтаграммы превышает len
, первые len
байта будут считаны в ваш буфер, а остальные будут потеряны.
В этом случае recvfrom()
возвращает -1 и устанавливает errno равным EMSGSIZE, вот как вы проверяете, произошло ли это.