1. 概述

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

[cpp] view plain copy  print?
  1. boost::system::error_code error

我们用这个类型去接受在函数中产生的错误, 如:

[cpp] view plain copy  print?
  1. socket.connect(endpoint, error);

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

[cpp] view plain copy  print?
  1. boost::asio::error::host_not_found;

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

[cpp] view plain copy  print?
  1. throw boost::system::system_error(error);

需要注意的是,我们的error被转化成 system_error了
显示错误很简单了,std::cout << e.what()

2. 异步调用

产生的异常error的传递是个问题,因为异步会立刻返回,局部变量是会被销毁的。而boost::asio::placeholders::error, 将会保存异常的状态,这样我们使用异步调用时如
socket::async_write_some的时候不用自己创建boost::system::error_code error了,直接使用boost::asio::placeholders::error作为参数即可,
同理,我们sync_write_some需要返回读写数据的大小,令人开心的是boost::asio::placeholders::bytes_transferred直接作为参数就可以保存数据大小。
实例如下:

[cpp] view plain copy  print?
  1. boost::asio::async_write(socket_,
  2. boost::asio::buffer(message_),
  3. boost::bind(&tcp_connection::handle_write, shared_from_this(),
  4. boost::asio::placeholders::error,
  5. boost::asio::placeholders::bytes_transferred));

参考手册上说的很明确,下面两个类就是为异步调用使用bind的时候设计的。

[cpp] view plain copy  print?
  1. boost::asio::placeholders::error
  2. boost::asio::placeholders::bytes_transferred

3. 同步调用

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

[cpp] view plain copy  print?
  1. boost::system::error_code error;
  2. size_t len = socket.read_some(boost::asio::buffer(buf), error);

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

[cpp] view plain copy  print?
  1. void handle_write(const boost::system::error_code& /*error*/,
  2. size_t /*bytes_transferred*/)
  3. {
  4. }

4. 总结

异步就用 boost::asio::placeholders::error, boost::asio::placeholders::bytes_transferred
同步就用 boost::system::error_code

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

  1. 【Boost】boost库asio详解7——boost::asio::buffer用法

    1. asio::buffer常用的构造方法 asio::buffer有多种的构造方法,而且buffer大小是自动管理的 1.1 字符数组 [cpp] view plain copy  print? ...

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

    boost::asio::error的用法浅析 作者:转载自:asio分享学习快乐更新时间:2009-8-2 一般而言我们创建用于接收error的类型大多声明如下: boost::system::er ...

  3. 使用 Boost.Lambda 库创建并存储在 Boost.Function 对象中的函子中使用 Boost.Units 的数量、单位和绝对类型

    使用 Boost.Lambda 库创建并存储在 Boost.Function 对象中的函子中使用 Boost.Units 的数量.单位和绝对类型 实现功能 C++实现代码 实现功能 使用 Boost. ...

  4. Python爬虫之selenium库使用详解

    Python爬虫之selenium库使用详解 本章内容如下: 什么是Selenium selenium基本使用 声明浏览器对象 访问页面 查找元素 多个元素查找 元素交互操作 交互动作 执行JavaS ...

  5. python时间函数详解_Python:Numpy库基础分析——详解datetime类型的处理

    原标题:Python:Numpy库基础分析--详解datetime类型的处理 Python:Numpy库基础分析--详解datetime类型的处理 关于时间的处理,Python中自带的处理时间的模块就 ...

  6. linux mysql 静态库_Linux静态库与动态库实例详解

    Linux静态库与动态库实例详解 1. Linux 下静态链接库编译与使用 首先编写如下代码: // main.c #include "test.h" int main(){ te ...

  7. python可以处理多大的数据_科多大数据之Python基础教程之Excel处理库openpyxl详解...

    原标题:科多大数据之Python基础教程之Excel处理库openpyxl详解 科多大数据小课堂来啦~Python基础教程之Excel处理库openpyxl详解 openpyxl是一个第三方库,可以处 ...

  8. NodeMCU 之 U8G2 库使用详解

    NodeMCU 之 U8G2 库使用详解 1.指令 u8g2.clearDisplay(); // 清除显示数据及屏幕u8g2.clearBuffer(); // 清Buffer缓冲区的数据u8g2. ...

  9. STC8H开发(一): 在Keil5中配置和使用FwLib_STC8封装库(图文详解)

    目录 STC8H开发(一): 在Keil5中配置和使用FwLib_STC8封装库(图文详解) STC8H开发(二): 在Linux VSCode中配置和使用FwLib_STC8封装库(图文详解) ST ...

最新文章

  1. 基于 Redis 实现分布式锁思考
  2. 为sharepoint 2013 增加切换账户登陆菜单
  3. Bootstrap 的辅助类
  4. linux软件管理(yum,rpm)
  5. vue引入bootstrap、jquery
  6. Vc控件用法总结之List Control
  7. 深度学习自学(十二):关键点数据集处理-300VW
  8. 这几个刺激的公众号 能让你怀疑人生
  9. ASP.NET登录状态保持 并 设置IE cookie
  10. wps 项目进度_如何用Excel做项目进度表
  11. 修复Webots在ubuntu下安装出现的一些依赖问题
  12. 微信下载多媒体文件 java_java微信开发之上传下载多媒体文件_php实例
  13. 解决win10无法启用文件和打印机共享功能,你可能没有权限使用网络资源。请与这台服务器的管理员联系以查明你是否有访问权限
  14. “三权分立”模型的概述
  15. RecyclerView之使用ItemTouchHelper实现交互动画
  16. 在线AI日语视频音频翻译中文字幕
  17. 网文IP风向之变 | 一点财经
  18. FoxyProxy使用教程
  19. MIMIC-III数据库的介绍
  20. 合肥Java面试常考题_北大青鸟java 面试--常见面试题(中)

热门文章

  1. 响应json数据之过滤静态资源
  2. try_catch_异常处理的第二种方式,自己处理异常
  3. Eurek Ribbon Feign常见问题及解决
  4. SpringBoot_配置-properties配置文件编码问题
  5. 手动使用cglib代理(了解)
  6. android 模拟 cdrom,stm32 usb 虚拟一个cdrom
  7. 深入理解Kafka(3)-Consumer
  8. 函数计算机按键没反应,关于waitKey()函数按键无反应情况
  9. 访问动态页面很慢 PHP,PHP动态网页程序优化及高效提速问题
  10. php 删除硬链接,为什么要用软链接硬链接