用asio的定时器实现带超时的connect,备忘

简介: // test.cpp : 定义控制台应用程序的入口点。   //      #include "stdafx.h"   #include    #include    #include    #include       using namespace boost::asio;...
  1. // test.cpp : 定义控制台应用程序的入口点。  
  2. //  
  3.   
  4. #include "stdafx.h"  
  5. #include <boost/asio.hpp>  
  6. #include <boost/bind.hpp>  
  7. #include <boost/date_time/posix_time/posix_time_types.hpp>  
  8. #include <iostream>  
  9.   
  10. using namespace boost::asio;  
  11. using boost::asio::ip::tcp;  
  12.   
  13. class connect_handler  
  14. {  
  15. public:  
  16.     connect_handler(io_service& ios)  
  17.         : io_service_(ios),  
  18.         timer_(ios),  
  19.         socket_(ios)  
  20.     {  
  21.         socket_.async_connect(  
  22.             tcp::endpoint(boost::asio::ip::address_v4::loopback(), 3212),  
  23.             boost::bind(&connect_handler::handle_connect, this,  
  24.             boost::asio::placeholders::error));  
  25.   
  26.         timer_.expires_from_now(boost::posix_time::seconds(5));  
  27.         timer_.async_wait(boost::bind(&connect_handler::close, this));  
  28.     }  
  29.   
  30.     void handle_connect(const boost::system::error_code& err)  
  31.     {  
  32.         if (err)  
  33.         {  
  34.             std::cout << "Connect error: " << err.message() << "\n";  
  35.         }  
  36.         else  
  37.         {  
  38.             std::cout << "Successful connection\n";  
  39.         }  
  40.     }  
  41.   
  42.     void close()  
  43.     {  
  44.         socket_.close();  
  45.     }  
  46.   
  47. private:  
  48.     io_service& io_service_;  
  49.     deadline_timer timer_;  
  50.     tcp::socket socket_;  
  51. };  
  52.   
  53. int main()  
  54. {  
  55.     try  
  56.     {  
  57.         io_service ios;  
  58.         tcp::acceptor a(ios, tcp::endpoint(tcp::v4(), 32123), 1);  
  59.   
  60.         // Make lots of connections so that at least some of them will block.  
  61.         connect_handler ch1(ios);  
  62.         //connect_handler ch2(ios);  
  63.         //connect_handler ch3(ios);  
  64.         //connect_handler ch4(ios);  
  65.         //connect_handler ch5(ios);  
  66.         //connect_handler ch6(ios);  
  67.         //connect_handler ch7(ios);  
  68.         //connect_handler ch8(ios);  
  69.         //connect_handler ch9(ios);  
  70.   
  71.         ios.run();  
  72.     }  
  73.     catch (std::exception& e)  
  74.     {  
  75.         std::cerr << "Exception: " << e.what() << "\n";  
  76.     }  
  77.   
  78.     return 0;  
  79. }  
目录
相关文章
|
消息中间件 前端开发 调度
C++20 协程——你还只是听过?觉得没时间了解,这里可以帮到你。五分钟 从没听过到使用的帮助手册
来源:协程是在C++20 标准中提出的一个新的工具。 它突破传统的程序在cpu中来回切换时需要更新和恢复PCB资源现场的耗时操作(多进程)或者COW(低级调度)操作时间。
399 0
|
10月前
|
开发框架 安全 .NET
C#面:Server.UrlEncode、HttpUtility.UrlDecode的区别
通过上述详细的解释和实例分析,相信大家对 `Server.UrlEncode` 和 `HttpUtility.UrlDecode` 的区别有了更深刻的理解,并能在实际开发中灵活运用。
215 0
|
Go 微服务
Go语言微服务框架 - 3.日志库的选型与引入
衡量日志库有多个指标,我们今天重点关注两点:简单易用 与 高性能。简单易用是一个日志库能被广泛使用的必要条件,而高性能则是企业级的日志库非常重要的衡量点,也能在源码层面对我们有一定的启发。
660 1
|
算法 数据可视化 搜索推荐
基于python的k-means聚类分析算法,对文本、数据等进行聚类,有轮廓系数和手肘法检验
本文详细介绍了基于Python实现的k-means聚类分析算法,包括数据准备、预处理、标准化、聚类数目确定、聚类分析、降维可视化以及结果输出的完整流程,并应用该算法对文本数据进行聚类分析,展示了轮廓系数法和手肘法检验确定最佳聚类数目的方法。
425 0
|
存储 API C++
【 QString接口大全】 Qt QString类使用示例
【 QString接口大全】 Qt QString类使用示例
456 1
|
设计模式 算法 C++
从 C++ 优化状态机实现:结合设计模式的实用指南
从 C++ 优化状态机实现:结合设计模式的实用指南
772 1
|
机器学习/深度学习 算法 数据挖掘
周志华《机器学习》西瓜书精炼版笔记来了!16 章完整版
周志华《机器学习》西瓜书精炼版笔记来了!16 章完整版
2220 0
周志华《机器学习》西瓜书精炼版笔记来了!16 章完整版
|
存储 Kubernetes 对象存储
Velero 系列文章(一):基础
Velero 系列文章(一):基础
Velero 系列文章(一):基础
|
C++ 容器
C++开发之using定义模板别名
using 定义模板别名   都知道 typedef可以用来定义类型别名。例如typedef unsigned int uint_t; 相当于给unsigned int类型起了个别名uint_t
222 0
|
缓存 监控 关系型数据库
构建高效的数据库应用:Python 实践
在当今数据驱动的世界中,构建高效的数据库应用程序对于企业和个人来说至关重要。Python 作为一种强大的编程语言,提供了丰富的数据库工具和库,使得开发人员能够轻松地构建高效、可靠的数据库应用程序。在本文中,我们将探讨一些关键的技术和最佳实践,以帮助你构建高效的数据库应用程序。