【问题标题】:boost asio and coroutine2 exampleboost asio 和 coroutine2 示例
【发布时间】:2016-12-23 13:15:14
【问题描述】:

在阅读coroutine2 的文档时,我发现了一个很好的snippet 代码,它显示了如何将它与asio 一起使用

以下是文档中的代码供参考:

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 上编译这个 sn-p 会给我与 yield 相关的编译器错误

您是否知道使用coroutine2 的最小客户端/服务器实现,如上例所示?

【问题讨论】:

    标签: c++ boost boost-asio boost-coroutine boost-coroutine2


    【解决方案1】:

    here 给出了一个使用协程的基于 Boost.Asio 的服务器示例。

    Boost.Coroutine 文档中显示的示例缺少boost::asio::spawn 用于创建可作为异步处理程序传递的yield_context 的部分。

    通过跟踪&lt;boost/asio/spawn.hpp&gt; 中的#include 链,它似乎只包含Boost.Coroutine v1。

    【讨论】:

      【解决方案2】:

      AFAIK boost.asio 仅支持 boost.coroutine,不支持 boost.coroutine2

      【讨论】:

      • coroutine2 文档中的示例因此具有误导性。太糟糕了,能支持就太好了。
      • 这并没有提供问题的答案。要批评或要求作者澄清,请在他们的帖子下方留下评论。 - From Review
      • @kiamlaluno 对我来说,它正在回答这个问题
      • @Danh 答案很短。文档的链接,以及说明答案所说的部分的引用将增加价值。
      • @kiamlaluno 不支持,说明没有相关文档
      猜你喜欢
      • 2018-12-03
      • 2012-10-26
      • 2019-07-31
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多