coroutine2
のドキュメントを読んでいる間、私は、コードの素敵なsnippetが見つかりました:ブーストASIOとcoroutine2例
void session(boost::asio::io_service& io_service){
// construct TCP-socket from io_service
boost::asio::ip::tcp::socket socket(io_service);
try{
for(;;){
// local data-buffer
char data[max_length];
boost::system::error_code ec;
// read asynchronous data from socket
// execution context will be suspended until
// some bytes are read from socket
std::size_t length=socket.async_read_some(
boost::asio::buffer(data),
boost::asio::yield[ec]);
if (ec==boost::asio::error::eof)
break; //connection closed cleanly by peer
else if(ec)
throw boost::system::system_error(ec); //some other error
// write some bytes asynchronously
boost::asio::async_write(
socket,
boost::asio::buffer(data,length),
boost::asio::yield[ec]);
if (ec==boost::asio::error::eof)
break; //connection closed cleanly by peer
else if(ec)
throw boost::system::system_error(ec); //some other error
}
} catch(std::exception const& e){
std::cerr<<"Exception: "<<e.what()<<"\n";
}
}
しかし、私はasioのドキュメントの実例を見つけることができません。そして、このコードをcoliruでコンパイルしようとすると、コンパイルエラーが発生します。yield
上記の例に示すように、coroutine2
を使用する最小のクライアント/サーバー実装ですか?
coroutine2のマニュアルの例は誤解を招きます。それはあまりにも悪いです、それをサポートすることは素晴らしいことです。 –
これは質問に対する答えを提供しません。批評をしたり、著者の説明を求めるには、投稿の下にコメントを残してください。 - [レビューの投稿](レビュー/低品質の投稿/ 14285746) – kiamlaluno
@kiamlalunoは私にこの質問に答えています – Danh