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>
分享到:
相关推荐
通过boost::asio::serialport类实现串口通信的例子
boost::asio::serial下6个工程演示多种串口读取写入方式方法,包含simple,with_timeout,async,callback,qt_integration,stream 等多个工程演示多种方式读取,写入串口,char,string ,buffer[]等多种数据格式。
boost::asio完成了通讯模块的编写,界面用MFC简单做了一下。 局域网的测试结果: 传输速度在6-7m/s 并发到500,服务器CPU和网络应用均出现使用99%的情况出现硬件瓶颈,新连接无法建立(测试服务器比较差,CPU:...
利用Boost::Asio库来实现Post/Get请求的发送。可以快速开发c++的http请求,访问以http为协议的服务器示例代码。
本文将为您详细介绍boost::asio的作用、解释以及如何使用它来实现高效的网络编程。 boost::asio的作用 boost::asio库是一个支持异步I/O操作的网络编程库,它可以帮助开发者实现高性能、可扩展、多线程的网络应用程序...
我尽可能地遵循 Asio 的习惯用法。 代码示例 # include # include < boost> # include using namespace std ; using namespace boost ::asio ; using boost::system::error_code; struct logger { void operator...
boost.asio库是一个跨平台的网络及底层IO的C++编程库,它使用现代C++手法实现了统一的异步调用模型。 boost.asio库支持TCP、UDP、ICMP通信协议。 下面介绍同步TCP模式: 大家好!我是同步方式! 我的主要特点...
利用boost::asio 搭建一个C/S架构的服务端模型。 该服务端支持客户端长连接。 链接到其他服务器使用了链接池。
此压缩包包含12个项目,每个项目都着重讲解Boost::Serialization一个方面的使用技巧,有详细的代码介绍具体使用方法。
boost::asio的例子,修改后的vs2005项目
boost::asio tcp服务器的实现 封装socket, 监听socket, C++11智能指针, 要求: vs2012或以上版本
这篇文章主要介绍了C++ boost::asio编程-同步TCP详解及实例代码的相关...boost.asio库是一个跨平台的网络及底层IO的C++编程库,它使用现代C++手法实现了统一的异步调用模型。 boost.asio库支持TCP、UDP、ICMP通信协议。
基于boost::asio的http server3修改的echo服务器,有多线程,多侦听端口,超时处理等
iOS boost asio demo
需要包含boost的路径为: include path: F:\boost_1_53_0 lib path:F:\boost_1_53_0\stage\lib 需要预定义的宏: _WIN32_WINNT=0x0700 在程序里写的接收ip为192.168.1.206,端口为 9002
主要介绍了C++ boost::asio编程-域名解析详细介绍的相关资料,这里附有实例代码,帮助大家学习理解这部分知识,需要的朋友可以参考下
Boost.Asio C++ Network Programming 书的翻译 此版本的书无目录失效BUG 并且带全书源代码 方便学习使用
不一下子应用MFC等界面,以直观易懂的控制台程序展现网络编程“服务端”-“客户端”是怎么运行的。最适合初学者。