UDP-приёмник телеметрии теряет хвосты пакетов без ошибок
Сенсоры шлют по UDP пакеты размером до 1400 байт. Приёмник:
char buf[1024];
ssize_t n = recvfrom(fd, buf, sizeof buf, 0, (sockaddr*)&from, &len);
parsePacket(buf, n);
Часть пакетов разбирается с ошибкой «оборванные данные», recvfrom при этом возвращает ровно 1024 и не сигнализирует ошибку. Остаток пакета в следующем вызове не приходит. Почему?
- Не влезшая в буфер часть датаграммы отбрасывается
- Остаток придёт следующим recvfrom, как в TCP
- Ядро фрагментирует пакеты больше 1024 байт
- Отправители обрезают пакеты по размеру MTU
