Принцип называется scatter/gather IO
. В основном это способ передачи нескольких буферов одновременно (по порядку) без дорогостоящего копирования в память. Он хорошо поддерживается в boost :: asio с очень гибкой и мощной (но также трудной для понимания) концепцией буферов и концепцией последовательности буферов.
Простой (непроверенный, но я верный) пример, с которого можно начать, будет:
std::vector<boost::asio::streambuf::const_buffers_type> buffers;
buffers.push_back( my_first_streambuf.data() );
buffers.push_back( my_second_streambuf.data() );
std::size_t length = boost::asio::write( mySocket, buffers );
Конечно, одним простым вариантом было бы просто прочитать оба сообщения в streambuf и просто отправить весь streambuf, но, исходя из вашего вопроса, я предполагаю, что по какой-то причине это не вариант?