Stack Overflow на русском Asked by Denver Toha on December 21, 2020
Есть следующий код, он просто принимает сообщение из сокета и печатает его в консоль.
#include <iostream>
#include <string>
#include <boost/asio.hpp>
#include <functional>
boost::asio::io_context context;
using boost::asio::ip::tcp;
const uint16_t port = 8000;
tcp::acceptor acceptor(context, tcp::endpoint(tcp::v6(), port));
void accept();
void out(std::shared_ptr<std::string> buff){
std::cout << *buff;
accept();
}
void do_read(std::shared_ptr<tcp::socket> session){
std::shared_ptr<std::string> buff(new std::string);
buff->resize(3000);
session->async_receive(boost::asio::buffer(*buff, 3000), std::bind(out, buff));
std::string rest = *buff;
session->close();
}
void accept(){
std::shared_ptr<tcp::socket> session(new tcp::socket(context));
auto handler = std::bind(do_read, session);
acceptor.async_accept(*session, handler);
}
int main(){
accept();
context.run();
return 0;
}
Код очень маленький и простенький, но тем не менее получается лапша из колбеков. Насколько мне известно, начиная с boost 1.70 в boost Asio включена поддержка coroutine TS. Как можно переписать этот код используя корутины в виде бесконченого цикла??
Get help from others!
Recent Questions
Recent Answers
© 2024 TransWikia.com. All rights reserved. Sites we Love: PCI Database, UKBizDB, Menu Kuliner, Sharing RPP