boost::asio 异步超时机制一

本文介绍了如何使用Boost.ASIO库创建一个TCP客户端,该客户端具有连接、读取和心跳超时机制。通过设置`deadline_timer`,在连接、读取操作和心跳包发送过程中,当超时发生时,客户端能够自动关闭连接并重新尝试。示例代码展示了如何使用`async_wait`和`async_read_until`进行异步操作,并处理各种可能的错误情况。
摘要由CSDN通过智能技术生成
#include <boost/asio/deadline_timer.hpp>
#include <boost/asio/io_service.hpp>
#include <boost/asio/ip/tcp.hpp>
#include <boost/asio/read_until.hpp>
#include <boost/asio/streambuf.hpp>
#include <boost/asio/write.hpp>
#include <boost/bind.hpp>
#include <iostream>

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


class client
{
public:
	// 在构造函数的初始化列表中 初始化所有变量
	client(boost::asio::io_service& io_service)
		: stopped_(false),
		socket_(io_service),
		deadline_(io_service),
		heartbeat_timer_(io_service)
	{
	}

	// 对外公开并使用的唯一接口
	// 
	void start(tcp::resolver::iterator endpoint_iter)
	{
		// 连接server
		start_connect(endpoint_iter);

		// 设定连接超时间,并指定回调函数
		deadline_.async_wait(boost::bind(&client::check_deadline, this));
	}

private:
	void stop()
	{
		stopped_ = true;
		boost::system::error_code ignored_ec;
		socket_.close(ignored_ec);// 关闭socket
		deadline_.cancel();// 取消定时器
		h
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值