К сожалению, вы не можете.
TL; DR
sendto
Функция возвращает как только пакет был отправлен в стек IP. IP-стек ядра обработает его и попытается отправить пакет через интерфейс WiFi.
В этом и заключается проблема: задержка передачи по WiFi большая (по сравнению с проводным Ethernet) и нерегулярная. Вот пример того, какую задержку вы должны ожидать:
Этот логарифмический график показывает задержку пинга между моим сервером и маршрутизатором, а также между моим сервером и беспроводным клиентом. Так ping
как двунаправленный, однонаправленная задержка, вероятно, составляет около половины этого.
Проводная связь показывает время пинга около 300 мкс, в то время как беспроводная связь показывает в среднем 7 мс (в 23 раза больше задержки).
Теперь почти тот же график, на этот раз линейный, чтобы выделить неровности:
Время Wi-Fi варьируется от 6 до 45 мс.
Решения
Поскольку sendto
функция возвращается быстрее, чем вы ожидаете, вы не можете точно определить, в какое время отправляются пакеты. Если вас действительно интересует время отправки пакета, вы, вероятно, можете оценить его, подождав ответа от клиента и сократив время вдвое.
Но, как вы уже поняли, все WiFi-клиенты получают пакет одновременно, так как это многоадресная рассылка.
Итак, настоящий вопрос здесь: чего вы пытаетесь достичь?
Например, если вы хотите, чтобы все ваши клиенты воспроизводили один и тот же аудиопоток одновременно, какое-то программное обеспечение PLL должно сработать.
Если вы хотите минимизировать задержку, вы все равно можете попытаться настроить ваши настройки WiFi, особенно те, которые касаются энергосбережения, на маршрутизаторе и на клиентах.
И если вы хотите добиться высокой производительности в режиме реального времени, вам, вероятно, стоит просто забыть о Wi-Fi.