c – 提升asio和coroutine2的例子

前端之家收集整理的这篇文章主要介绍了c – 提升asio和coroutine2的例子前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
在阅读coroutine2的文档时,我发现了一个很好的 snippet代码,展示了如何在asio中使用它

这里的参考是文档中的代码

  1. void session(boost::asio::io_service& io_service){
  2. // construct TCP-socket from io_service
  3. boost::asio::ip::tcp::socket socket(io_service);
  4.  
  5. try{
  6. for(;;){
  7. // local data-buffer
  8. char data[max_length];
  9.  
  10. boost::system::error_code ec;
  11.  
  12. // read asynchronous data from socket
  13. // execution context will be suspended until
  14. // some bytes are read from socket
  15. std::size_t length=socket.async_read_some(
  16. boost::asio::buffer(data),boost::asio::yield[ec]);
  17. if (ec==boost::asio::error::eof)
  18. break; //connection closed cleanly by peer
  19. else if(ec)
  20. throw boost::system::system_error(ec); //some other error
  21.  
  22. // write some bytes asynchronously
  23. boost::asio::async_write(
  24. socket,boost::asio::buffer(data,length),boost::asio::yield[ec]);
  25. if (ec==boost::asio::error::eof)
  26. break; //connection closed cleanly by peer
  27. else if(ec)
  28. throw boost::system::system_error(ec); //some other error
  29. }
  30. } catch(std::exception const& e){
  31. std::cerr<<"Exception: "<<e.what()<<"\n";
  32. }
  33. }

但是我找不到关于asio文档的工作示例,并且尝试在coliru上编译这个片段给出了与yield相关的编译器错误

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

解决方法

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

猜你在找的C&C++相关文章