【Boost】boost库asio详解6——boost::asio::error的用法浅析
1. 概述
一般而言我们创建用于接收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()
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直接作为参数就可以保存数据大小。
实例如下:
- 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));
参考手册上说的很明确,下面两个类就是为异步调用使用bind的时候设计的。
- boost::asio::placeholders::error
- boost::asio::placeholders::bytes_transferred
3. 同步调用
当然了boost::system::error_code 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*/)
- {
- }
4. 总结
异步就用 boost::asio::placeholders::error, boost::asio::placeholders::bytes_transferred
同步就用 boost::system::error_code
【Boost】boost库asio详解6——boost::asio::error的用法浅析相关推荐
- 【Boost】boost库asio详解7——boost::asio::buffer用法
1. asio::buffer常用的构造方法 asio::buffer有多种的构造方法,而且buffer大小是自动管理的 1.1 字符数组 [cpp] view plain copy print? ...
- asio boost 异步错误处理_boost::asio::error的用法浅析
boost::asio::error的用法浅析 作者:转载自:asio分享学习快乐更新时间:2009-8-2 一般而言我们创建用于接收error的类型大多声明如下: boost::system::er ...
- 使用 Boost.Lambda 库创建并存储在 Boost.Function 对象中的函子中使用 Boost.Units 的数量、单位和绝对类型
使用 Boost.Lambda 库创建并存储在 Boost.Function 对象中的函子中使用 Boost.Units 的数量.单位和绝对类型 实现功能 C++实现代码 实现功能 使用 Boost. ...
- Python爬虫之selenium库使用详解
Python爬虫之selenium库使用详解 本章内容如下: 什么是Selenium selenium基本使用 声明浏览器对象 访问页面 查找元素 多个元素查找 元素交互操作 交互动作 执行JavaS ...
- python时间函数详解_Python:Numpy库基础分析——详解datetime类型的处理
原标题:Python:Numpy库基础分析--详解datetime类型的处理 Python:Numpy库基础分析--详解datetime类型的处理 关于时间的处理,Python中自带的处理时间的模块就 ...
- linux mysql 静态库_Linux静态库与动态库实例详解
Linux静态库与动态库实例详解 1. Linux 下静态链接库编译与使用 首先编写如下代码: // main.c #include "test.h" int main(){ te ...
- python可以处理多大的数据_科多大数据之Python基础教程之Excel处理库openpyxl详解...
原标题:科多大数据之Python基础教程之Excel处理库openpyxl详解 科多大数据小课堂来啦~Python基础教程之Excel处理库openpyxl详解 openpyxl是一个第三方库,可以处 ...
- NodeMCU 之 U8G2 库使用详解
NodeMCU 之 U8G2 库使用详解 1.指令 u8g2.clearDisplay(); // 清除显示数据及屏幕u8g2.clearBuffer(); // 清Buffer缓冲区的数据u8g2. ...
- STC8H开发(一): 在Keil5中配置和使用FwLib_STC8封装库(图文详解)
目录 STC8H开发(一): 在Keil5中配置和使用FwLib_STC8封装库(图文详解) STC8H开发(二): 在Linux VSCode中配置和使用FwLib_STC8封装库(图文详解) ST ...
最新文章
- 基于 Redis 实现分布式锁思考
- 为sharepoint 2013 增加切换账户登陆菜单
- Bootstrap 的辅助类
- linux软件管理(yum,rpm)
- vue引入bootstrap、jquery
- Vc控件用法总结之List Control
- 深度学习自学(十二):关键点数据集处理-300VW
- 这几个刺激的公众号 能让你怀疑人生
- ASP.NET登录状态保持 并 设置IE cookie
- wps 项目进度_如何用Excel做项目进度表
- 修复Webots在ubuntu下安装出现的一些依赖问题
- 微信下载多媒体文件 java_java微信开发之上传下载多媒体文件_php实例
- 解决win10无法启用文件和打印机共享功能,你可能没有权限使用网络资源。请与这台服务器的管理员联系以查明你是否有访问权限
- “三权分立”模型的概述
- RecyclerView之使用ItemTouchHelper实现交互动画
- 在线AI日语视频音频翻译中文字幕
- 网文IP风向之变 | 一点财经
- FoxyProxy使用教程
- MIMIC-III数据库的介绍
- 合肥Java面试常考题_北大青鸟java 面试--常见面试题(中)
热门文章
- 响应json数据之过滤静态资源
- try_catch_异常处理的第二种方式,自己处理异常
- Eurek Ribbon Feign常见问题及解决
- SpringBoot_配置-properties配置文件编码问题
- 手动使用cglib代理(了解)
- android 模拟 cdrom,stm32 usb 虚拟一个cdrom
- 深入理解Kafka(3)-Consumer
- 函数计算机按键没反应,关于waitKey()函数按键无反应情况
- 访问动态页面很慢 PHP,PHP动态网页程序优化及高效提速问题
- php 删除硬链接,为什么要用软链接硬链接