Предположим, что отправитель UDP выполняет sendto несколько раз:
sendto(s, buffer, 100, ...);
sendto(s, buffer, 200, ...);
sendto(s, buffer, 300, ...);
Получатель выполняет следующий код при наличии данных:
void OnReceive()
{
recvfrom(s, buffer, 1000, ...);
}
Теперь, если все данные (100 + 200)+300) доступно при вызове recvfrom, возможно ли, что он будет прочитан одним вызовом recvfrom или несколькими вызовами recvfrom с непредсказуемыми размерами?Или он всегда будет приниматься теми же порциями, что и отправленный: 100, 200, 300?
Чтобы написать 100% правильный код получателя, должен ли я реализовать своего рода логику анализа потока или логику чтения записей данных?
В этом вопросе я предполагаю, что данные не теряются и порядок пакетов не изменяется, хотя в общем случае это неверно для UDP-сокетов.