mirror of
https://github.com/boostorg/asio.git
synced 2026-02-22 01:32:08 +00:00
1c0f3c36be2fde195b20c29315d911156f0f672a
The following example illustrates a simple asynchronous operation that
implements an echo protocol in terms of a coroutine:
template <typename CompletionToken>
auto async_echo(tcp::socket& socket,
CompletionToken&& token)
{
return boost::asio::async_initiate<
CompletionToken, void(boost::system::error_code)>(
boost::asio::experimental::co_composed<
void(boost::system::error_code)>(
[](auto state, tcp::socket& socket) -> void
{
try
{
state.throw_if_cancelled(true);
state.reset_cancellation_state(
boost::asio::enable_terminal_cancellation());
for (;;)
{
char data[1024];
std::size_t n = co_await socket.async_read_some(
boost::asio::buffer(data), boost::asio::deferred);
co_await boost::asio::async_write(socket,
boost::asio::buffer(data, n), boost::asio::deferred);
}
}
catch (const boost::system::system_error& e)
{
co_return {e.code()};
}
}, socket),
token, std::ref(socket));
}
Description
Mirrored via gitea-mirror
Languages
C++
99.6%
HTML
0.2%
Perl
0.2%