Я впервые работаю с UDP-сокетами на C++ и не уверен, что понимаю, как они работают. Я знаю, что sendto
/recvfrom
и send
/recv
обычно возвращают количество фактически отправленных или полученных байтов. Я слышал, что это значение может быть сколь угодно малым (но не менее 1) и зависит от того, сколько данных находится в буфере сокета (при чтении) или сколько свободного места осталось в буфере (при записи).
Если sendto
и recvfrom
гарантируют только то, что за один раз будет отправлен или получен 1 байт, и дейтаграммы могут быть получены не по порядку, как любой протокол UDP может оставаться согласованным? Разве это не означает, что байты в сообщении могут быть произвольно перемешаны, когда я их получаю? Есть ли способ гарантировать, что сообщение будет отправлено или получено сразу?