boost::asio::error的用法浅析

Boost中ASIO的一些用法-定时器 一、介绍 ASIO,基于操作系统的异步机制,可有效避免多线程编程的诸多副作用。 目前主要关注于通信方面,使用大量的类封装了socket,提供更高层次的接口 二、使用不需要编译,默认不支持SSL,要支持的话需要自己编译OpenSSL。 三、用法Sample 1、定时器 #include #include #include using namespace bo 阅读详情

 

boost::asio::error的用法浅析

作者:转载自:asio分享学习快乐更新时间:2009-8-2

 一般而言我们创建用于接收error的类型大多声明如下:

boost::system::error_code error 我们用这个类型去接受在函数中产生的错误

如

 

socket.connect(  endpoint, error);

 

如果连接失败,错误类型会保存到error中,比如连接主机失败可能会返回这样的错误

 

boost::asio::error::host_not_found;

通过if (error)检测到error后,抛出异常

throw boost::system::system_error(error);

需要注意的是,我们的error被 转化成 system_error了

显示错误很简单了,std::cout << e.what()

就哦啦。

大致的异常都是这个步骤进行的,

然而还有一点在异步调用的时候

产生的异常error 的传递是个问题,因为异步会立刻返回,局部变量是会被销毁的,

boost::asio::placeholders::error,将会保存异常的状态,这样我们使用异步调用时如

socket::async_write_some的时候不用自己创建boost::system::error_co error 了,直接使用

 

boost::asio::placeholders::error作为参数即可,

同理,我们sync_write_some需要返回读写数据的大小,令人开心的是boost::asio::placeholders::bytes_transferred直接作为参数就可以保存数据大小。

实例如下:

 

boost::asio::async_write(socket_, boost::asio::buffer(message_),
        boost::bind(&tcp_connection::handle_write, shared_from_this(),
          boost::asio::placeholders::error,
          boost::asio::placeholders::bytes_transferred));
  }
参考手册上说的很明确, boost::asio::placeholders::error,boost::asio::placeholders::bytes_transferred就是为异步调用使用bind的时候设计的。

当然了boost::system::error_co error还用有用的,同步调用的时候我们就用它作为参数

如:

 

boost::system::error_code error;

 size_t len = socket.read_some(boost::asio::buffer(buf), error);

同样在异步调用的回调handle中也用它作参数如

 

 

void handle_write(const boost::system::error_code& /*error*/,

      size_t /*bytes_transferred*/)
  {
  }

总结就是说异步就用 boost::asio::placeholders::error,boost::asio::placeholders::bytes_transferred

 

同步就用boost::system::error_code

 

源文档 <http://www.xin3721.com/Article/xin3721_Article_1909.html>

 

【ROS】ROS上位机使用Serial库和boost::asio库与STM32进行USART通讯 ROS上位机使用Serial库和boost::asio库与STM32进行USART通讯,库安装、串口收发程序讲解 阅读详情

相关推荐

STM32F4_LCD显示汉字

LCD显示汉字和显示图片、数字、字符的原理是一样的,都是将汉字、图片、数字以及字符转换点阵,进而通过函数扫描点阵在LCD上显示;

light_2025的博客 1万+

asio boost 异步错误处理_boost::asio::error的用法浅析

boost::asio::error的用法浅析作者:转载自:asio分享学习快乐更新时间:2009-8-2一般而言我们创建用于接收error的类型大多声明如下:boost::system::error_code error 我们用这个类型去接受在函数中产生的错误如socket.connect(endpoint, error);如果连接失败,错误类型会保存到error中,比如连接主机失败可能会返回这...

weixin_32475629的博客 1004

Zephyr RTOS线程间通讯实战:消息队列与信号量的5个经典应用场景

本文深入探讨了Zephyr RTOS中线程间通讯的核心机制,通过消息队列与信号量的组合,详细解析了传感器数据处理流水线、命令分发系统、日志记录、资源池管理以及周期性任务协同调度等5个经典应用场景。这些实战模式为构建高效、稳定且可维护的嵌入式多线程系统提供了清晰的设计蓝图和代码范例。

tomato的博客 94

BOOST中read_some和 boost::asio::error::eof(2)错误

当socket读写完成调用回调函数时候一定要检查 是不是有EOF错误,如果有那么好了,另一方已经断开连接了别无选择,你也断开把。 for (;;) { boost::array < char, 128 > buf; boost::system::error_code error; size_t len = socket.read_some(...

weixin_30302609的博客 1023

第17篇:深入解析OpenEuler 24.03系统中的逻辑卷管理(LVM)

OpenEuler 24.03系统中的逻辑卷管理(LVM)提供了灵活的存储管理方案,通过在物理存储与文件系统间构建抽象层实现动态资源分配。

专注于系统运维、数据库、DevOps、虚拟化技术、docker、kubernetes、等云原生技术。 1689

CST新手必看:共面波导色散曲线绘制全流程(附参数设置避坑指南)

本文详细介绍了CST Microwave Studio中绘制共面波导色散曲线的全流程操作,特别针对新手常见的边界条件设置错误、参数扫描失效等问题提供解决方案。通过模型建立、边界条件设置、本征模求解器配置等步骤,帮助工程师快速掌握CPW色散特性分析方法,并附有参数设置避坑指南,提升高频电路设计效率。

tomato的博客 990

boost.asio网络错误码

对于网络编程,无论是底层socket编程还是上层网络库的编程,正常逻辑往往都非常的简单,重要的是对异常逻辑的把握。比如连接错误,往往都会有很多种。 最近项目中用的长连接(TCP)就是基于boost.asio来做的,我们的windows、ios、android都用了这个作为底层网络库。在发生网络错误都会将错误码上报,各平台上报的错误码又不相同,所以深入asio内部查看了一下对于错误码的定义. ...

最爱吹吹风 1451

基于转录逆转的药物重定向 GPS 模型

GPS是一个基于分子结构预测基因表达扰动的开源平台,由三个模块组成:RCL(在LINCS扰动数据上训练抗噪MLP)、GPS4Drugs(预测新化合物的基因表达谱并进行逆转评分)、MolSearch(基于MCTS的分子优化)。平台使用Morgan指纹和Gene Ontology注释作为特征输入,将基因表达扰动离散为三分类标签。训练数据来自LINCS Phase I的18,746个化合物和978个landmark基因,支持四细胞系独立训练,可用于药物重定向与化合物筛选。

听雨草堂 83

boost库asio详解8——几个TCP的简单例子

摘于boost官网的几个例子, 做了点小修改, 笔记之. 同步客户端 [cpp] view plaincopyprint? void test_asio_synclient()   {       typedef boost::asio::io_service IoService;       // 该命名空间下有几个常用类: accetpt

晴天的专栏 1797

Android性能优化之Android Profiler

在移动应用开发中,打造一个流畅、省电且不卡顿的用户体验是至关重要的。然而,随着应用功能的日益复杂,内存泄漏、CPU暴涨、网络卡顿以及电量消耗过快等问题常常化身为隐形杀手,悄悄吞噬着用户体验。为了帮助开发者精准定位并解决这些性能瓶颈,谷歌在Android Studio中集成了一款强大的一站式性能分析工具Android Profiler。Android Profiler作为Android Studio内置的实时数据可视化工具,支持运行在Android 5.0及更高版本的设备上。

xiangzhihong8的专栏 202

AI Agent在智能广告投放中的应用

随着互联网的快速发展,广告投放市场变得越来越复杂和竞争激烈。传统的广告投放方式往往难以精准地触达目标受众,导致广告资源的浪费。AI Agent作为一种智能的自动化程序,能够在复杂的环境中自主学习、决策和执行任务。本文章的目的在于深入探讨AI Agent在智能广告投放中的应用,研究如何利用AI Agent提高广告投放的精准度、效率和效果,降低成本。范围涵盖了AI Agent的基本原理、相关算法、在广告投放中的具体应用场景以及实际案例分析等方面。

欢迎来到我的优快云空间!这里聚焦AI大模型应用实战,分享前沿技术、实战案例与开发经验。 619

boost::asio 网络传输错误码的一些实验结果(recv error_code)

boost::asio网络传输错误码的一些实验结果(recv error_code ) 错误码很重要,可以由此判断网络连接到底发生了神马事情,从而驱动高层逻辑的行为。只有笼统的错误码判断的网络层是不够规范的,鄙人觉得有些错误码还是需要在网络层就区分开的,特此记录一些当前实验的错误码以及发生原因。 以下是一部分在async_receive()的handler处捕获到的比较有用的错误码 错误码(十进制...

xupeng1644的博客 2407

锂电池充电器电路设计 里面有电路

锂电池充电器电路设计 里面有电路 3.7V升压到5V电路设计。

boost库asio详解6——boost::asio::error的用法浅析

1. 概述 一般而言我们创建用于接收error的类型大多声明如下: [cpp] view plaincopyprint? boost::system::error_code error   我们用这个类型去接受在函数中产生的错误, 如:  [cpp] view plaincopyprint? socke

晴天的专栏 1468

假人有限元模型

假人模型,车辆碰撞假人有限元模型,适合做乘员安全的研究者利用

精雕软件(JDpaint) 5.5 绿色版

精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版

Boost::Asio::Error的用法浅析

一般而言我们创建用于接收error的类型大多声明如下: boost::system::error_code error 我们用这个类型去接受在函数中产生的错误 如 socket.connect( endpoint, error); 如果连接失败,错误类型会保存到error中,比如连接主机失败可能会返回这样的错误boost::asio::error::host_not_found;通过i

Ericdm的专栏 1210

Statistics and Machine Learning Toolbox

Statistics and Machine Learning Toolbox(带书签),MATLAB统计学习工具

Boost::Asio::Error的用法浅析

一般而言我们创建用于接收error的类型大多声明如下: boost::system::error_code error 我们用这个类型去接受在函数中产生的错误 如 socket.connect( endpoint, error); 如果连接失败,错误类型会保存到error中,比如连接主机失败可能会返回这样的错误 boost::asio::error::host_not_found; 通过i...

SurpassLi的专栏 51

【Boost】boost库asio详解6——boost::asio::error的用法浅析

1. 概述 一般而言我们创建用于接收error的类型大多声明如下: [cpp] view plain copy  print? boost::system::error_code error   我们用这个类型去接受在函数中产生的错误, 如:  [cpp] view plain copy  print? s

liujiayu2的专栏 632

boost::asio::steady_timer的一个错误用法

boost::asio::steady_timer的一个错误用法。 //使用boost.chrono代替std.chrono, #define BOOST_ASIO_DISABLE_STD_CHRONO #include #include #include #include #include bool g_isExit = false; void DoSth(int idx, co

zhang的专栏 5619

boost库asio详解7——boost::asio::buffer用法

1. asio::buffer常用的构造方法 asio::buffer有多种的构造方法,而且buffer大小是自动管理的 1.1 字符数组 [cpp] view plaincopyprint? char d1[128];   size_t bytes_transferred = socket.receive(boost::asio::buffe

晴天的专栏 2847

二、C++ boost::asio 的使用

上一节介绍了visual studio搭建boost环境,现在我们来使用它来进行网络编程。

m0_58311374的博客 1896
上一篇: VS2008下编译Boost::asio
下一篇: Boost.Asio基础剖析
liufei_learning
博客等级 码龄17年 821粉丝 145原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值