У меня есть UDP сокет, который будет принимать какие-то пакеты, потенциально разных размеров, и я с этим справиться асинхронно:Переменный размер буфера для приема UDP-пакетов
socket.async_receive_from(boost::asio::buffer(buffer, 65536), senderEndpoint, handler);
Проблема здесь в том, что для обработки различных размеров У меня большой буфер, что можно было бы решить с помощью буферов с переменным размером.
Насколько я понимаю, при использовании async_receive_from
обработчик вызывается только с одним пакетом за раз, поскольку границы пакетов сохраняются в UDP. Итак, есть способ предоставить пустой буфер async_receive_from
, что Asio будет расти, чтобы соответствовать размеру пакета?
Также обратите внимание, что я переношу пакеты, поэтому для каждого пакета, проходящего через этот сокет, 4 первых байта являются длиной пакета.
Почему? Просто укажите самый большой буфер, который вам нужен. Метод получения подскажет, сколько байтов было действительно получено. – EJP
Эта программа будет работать на мобильной платформе, а не на ПК, поэтому ее объем памяти должен быть легким. Я думаю, что может быть более эффективным способом, чем выделение большого буфера. – Synxis
Выделение одного большого буфера один раз намного эффективнее, чем выделение большого количества небольших буферов. – EJP