Asynchronousreadingfromboost::asiosocketwithtimeout
创始人
2024-09-21 04:30:29
0

在使用boost::asio套接字从网络中接收数据时,我们可能需要设置超时时间以确保操作不会无限期地阻塞。解决方法是使用基于时间的异步等待函数来实现超时读取。以下是一个示例代码:

#include #include #include #include

using boost::asio::ip::tcp;

class Session { public: Session(boost::asio::io_service& ios) : m_socket(ios), m_timer(ios) {}

tcp::socket& socket() { return m_socket; }

void start() { asyncRead(); }

private: void asyncRead() { m_socket.async_read_some(boost::asio::buffer(m_buffer), boost::bind(&Session::handleRead, this, boost::asio::placeholders::error, boost::asio::placeholders::bytes_transferred));

m_timer.expires_from_now(std::chrono::seconds(10));
m_timer.async_wait(boost::bind(&Session::handleTimeout, this));

}

void handleRead(const boost::system::error_code& error, std::size_t bytes_transferred) { m_timer.cancel();

if (error) {
  std::cerr << "read error: " << error.message() << std::endl;
  return;
}

std::cout << "read " << bytes_transferred << " bytes: ";
std::cout.write(m_buffer.data(), bytes_transferred);
std::cout << std::endl;

asyncRead();

}

void handleTimeout() { std::cerr << "read timeout" << std::endl; m_socket.cancel(); }

tcp::socket m_socket; boost::asio::steady_timer m_timer; std::array m_buffer; };

int main() { try { boost::asio::io_service ios; tcp::acceptor acceptor(ios, tcp::endpoint(tcp::v4(), 12345));

while (true) {
  std::cout << "waiting for connection..." << std::endl;

  tcp::socket socket(ios);
  acceptor.accept

相关内容

热门资讯

分享一款!来玩app辅助工具,... 分享一款!来玩app辅助工具,aapoker透明挂,新2025教程(本然存在有挂)1、金币登录送、破...
透视安装!hhpoker辅助下... 透视安装!hhpoker辅助下载,新二号辅助软件怎么下载,技巧教程(有挂技巧)准备好在新二号辅助软件...
最新研发!wepoke辅助透视... 最新研发!wepoke辅助透视教程,wepoke有没有挂,玩家教你(一贯真的是有挂)1、在wepok...
透视软件!红龙poker透视,... 透视软件!红龙poker透视,新广西老友辅助,详细教程(有挂辅助);小薇(透视辅助)致您一封信;亲爱...
记者揭秘!we poke软件免... 记者揭秘!we poke软件免费版,wpk德州透视辅助,详细教程(都是有挂);无聊就玩这款wpk德州...
透视线上!德普之星有没有挂,川... 透视线上!德普之星有没有挂,川娱竞技血战辅助器,新版2025教程(有挂软件);川娱竞技血战辅助器软件...
玩家必备!红龙扑克真假,aap... 玩家必备!红龙扑克真假,aapoker辅助工具存在,可靠教程(从前是真的有挂)是一款可以让一直输的玩...
透视玄学!wpk辅助器安装,福... 透视玄学!wpk辅助器安装,福建大玩家插件,德州教程(有挂透视);福建大玩家插件软件透明挂更新新赛季...
玩家分享!wopoker辅助v... 玩家分享!wopoker辅助v3.0,德州免费辅助神器app,力荐教程(原生真的有挂)1、金币登录送...
透视有挂!wpk辅助插件,闲逸... 透视有挂!wpk辅助插件,闲逸辅助脚本,存在挂教程(有挂透明);实战中需综合运用上述技巧,并根据牌桌...