Предположим, что используются Linux и UDP.
На справочной странице recvfrom говорится:
Вызовы приема обычно возвращают любые доступные данные в пределах запрошенной суммы, а не ждут получения всей запрошенной суммы.
Если это так, то весьма вероятно, что из сокета будут возвращены частичные данные протокола уровня приложения, даже если задано желаемое MAX_SIZE
.
Следует ли сделать следующий вызов recvfrom
?
С другой стороны, также возможно иметь больше данных, чем мне нужно, например два UDP-пакета в буфере сокета. Если в этом случае вызывается recvfrom()
, вернет ли он их обоих (предположим, в MAX_SIZE
)?
Я полагаю, что в начале каждого сообщения UDP должна быть некоторая информация о размере уровня протокола приложения, чтобы она не испортилась.