|
|
|
@ -20,15 +20,16 @@ template <typename Readable, typename Buffer, typename Callback> |
|
|
|
static void AsyncReceiveInto(Readable& r, Buffer& buffer, Callback&& c) { |
|
|
|
static_assert(std::is_trivial_v<Buffer>); |
|
|
|
auto boost_buffer{boost::asio::buffer(&buffer, sizeof(Buffer))}; |
|
|
|
r.async_read_some(boost_buffer, [&](const boost::system::error_code& error, size_t bytes_read) { |
|
|
|
if (!error.failed()) { |
|
|
|
const u8* buffer_start = reinterpret_cast<const u8*>(&buffer); |
|
|
|
std::span<const u8> received_data{buffer_start, buffer_start + bytes_read}; |
|
|
|
c(received_data); |
|
|
|
} |
|
|
|
r.async_read_some( |
|
|
|
boost_buffer, [&, c](const boost::system::error_code& error, size_t bytes_read) { |
|
|
|
if (!error.failed()) { |
|
|
|
const u8* buffer_start = reinterpret_cast<const u8*>(&buffer); |
|
|
|
std::span<const u8> received_data{buffer_start, buffer_start + bytes_read}; |
|
|
|
c(received_data); |
|
|
|
} |
|
|
|
|
|
|
|
AsyncReceiveInto(r, buffer, c); |
|
|
|
}); |
|
|
|
AsyncReceiveInto(r, buffer, c); |
|
|
|
}); |
|
|
|
} |
|
|
|
|
|
|
|
template <typename Readable, typename Buffer> |
|
|
|
|