Прежде всего, без измерений ты никуда Можете ли вы доказать, что это излишне медленно?
Во-вторых, обязательно используйте scatter-collect и составные операции записи, предоставленные ASIO. Это устраняет ваш код как источник неэффективности, а также, как правило, освобождает место для ошибок.
В этом случае
boost::asio::write(socket, boost::asio::buffer((char*)&data_size_network_byte_order, sizeof(uint32)));
boost::asio::write(socket, boost::asio::buffer(results->get_data(), data_size));
Может быть
Демо
Live On Coliru
#include <boost/asio.hpp>
int main() {
using namespace boost::asio;
io_context io;
ip::tcp::socket s(io);
s.connect({{}, 6868});
std::string buf1 = "hello", buf2 = "world";
std::vector<const_buffer> bufs { buffer(buf1), buffer(buf2) };
auto written = write(s, bufs);
assert(written == buf1.size() + buf2.size());
}
Это посылает "helloworld", как вы можете видеть по выводу netcat
и тому факту, что assert не срабатывает.