c++ - boost asio 和 coroutine2 示例

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

在阅读 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 上编译此代码段会给我与 yield

相关的编译器错误

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

最佳答案

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

关于c++ - boost asio 和 coroutine2 示例,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38987158/

相关文章:

c++ - GStreamer GError boost::: system::error_code?

c++ - boost::serialization::access 可以在运行时/以编程方式动态更改版本吗?

c++: BOOST_ASIO 服务器回复不符合预期?

c++ - 尝试在项目中使用 Google Protocol buffer c++ 链接错误

c++ - 如何消除这个模板的歧义?

C++/CLI 包装器 LNK2028 和 LNK2019 错误

c++ - Boost Beast 关闭后重新连接 websocket 连接

c++ - 在 Linux 中寻找流量控制功能(即 QOS)库

c++ - boost 序列化: how to choose version at runtime?

c++ - 我的服务器以代码 137 退出