Я сделал свой UDP-сервер и клиент с помощью udp-сокетов boost :: asio. Все выглядело хорошо, пока я не начал отправлять новые датаграммы. Они правильно передаются от клиента к серверу. Но в моем буфере они объединены в одно сообщение.
я использую
udp::socket::async_receive
с std::array<char, 1 << 18 >
буфером
для выполнения асинхронного запроса. И получать данные через обратный вызов
void on_receive(const error_code& code, size_t bytes_transferred)
Если я отправляю данные слишком часто (каждые 10 миллисекунд), я получаю несколько датаграмм одновременно в свой буфер с обратным вызовом выше. Вопрос в том, как их разделить? Примечание. Мои датаграммы UDP имеют переменную длину. Я не хочу использовать дополнительный заголовок с размером, потому что это сделает мой код бесполезным для сторонних датаграмм.
on_receive
сообщении предоставленную пользователем функцию обратного вызова, которая обрабатывает все включенные сообщения в один полученный пакет. - person Chad   schedule 23.07.2012buf_.clear()
после получения каждой дейтаграммы? - person Nikolai Fetissov   schedule 23.07.2012sendmmsg
(man7.org/linux /man-pages/man2/sendmmsg.2.html), который, я сомневаюсь, поддерживается asio. - person Nikolai Fetissov   schedule 23.07.2012sendmmsg
для сокета udp в asio. К сожалению, мое решение могло привести к проблеме, когда частота небольших сообщений будет слишком высокой. - person valery_l   schedule 23.07.2012