Boost.Asio是一个用于网络和底层 I/O 编程事的跨平台 c + + 库,为开发人员提供一种一致的使用现代的 c + + 方法的异步模型。
概述
在 Boost.Asio,加上基本原理和设计信息中所包含的功能的概述。
使用 Boost.Asio
如何在您的应用程序中使用 Boost.Asio。包括在库依赖项和受支持的平台上的信息。
教程
介绍了使用 Boost.Asio,所需的基本概念和演示如何使用 Boost.Asio 来开发简单的客户端和服务器程序的教程。
例子
说明 Boost.Asio 在更复杂的应用程序中使用的例子。
引用
详细的类和函数参考。
修订历史记录
Boost.Asio 所做的更改在每个的 Boost 发行版中的日志。
索引
书式文本索引的 Boost.Asio 文件。
使用 Boost.Asio
支持的平台
下面的平台和编译器进行了测试︰
Win32 和 Win64 使用 Visual c + + 7.1 和 Visual c + + 8.0。
Win32 使用 MinGW。
Win32 使用 Cygwin。(必须定义__USE_W32_SOCKETS )。
Linux (2.4 或 2.6 内核) 使用 g + + 3.3 或更高版本。
Solaris 使用 g + + 3.3 或更高版本。
Mac OS X 10.4 使用 g + + 3.3 或更高版本。
以下平台也可以工作︰
使用 C/c + + XL v9 的 AIX 5.3。
中的 HP-UX 11i v3 使用修补 + aC + A.06.14。
QNX 中微子 6.3 使用 g + + 3.3 或更高版本。
Solaris 使用太阳工作室 11 或更高版本。
使用 c + + 康柏 v7.1 Tru64 v5.1。
Win32 使用 Borland c + + 5.9.2
依赖项
以下库必须是可用以链接使用 Boost.Asio 的程序︰
boost::system::error_code和boost::system::system_error类的的 Boost.System。
Boost.Regex (可选) 如果您使用任何read_until()或async_read_until()重载,采取boost::regex参数。
OpenSSL(可选) 如果您使用 Boost.Asio 的 SSL 支持。
此外,一些例子也需要的 Boost.Thread、 Boost.Date_Time 或 Boost.Serialization 的库。
[Note] 注意
MSVC 或 Borland c + + 与你可能想要添加-DBOOST_DATE_TIME_NO_LIB和-DBOOST_REGEX_NO_LIB向您的项目设置以禁用自动链接 Boost.Date_Time 和 Boost.Regex 库分别。另外,你可以选择生成这些库并将链接到它们。
建筑的 Boost 库
你可以建立需要使用 Boost.Asio 的 Boost 库的子集并通过运行下面的命令从根提振其例子下载包︰
bjam --with-system --with-thread --with-date_time --with-regex --with-serialization stage
这是假设你已经建立了bjam。有关更多详细信息,请参阅 Boost.Build 文档。
可选的单独编译
默认情况下,Boost.Asio 是一个需要包含头文件的库。然而,一些开发商可能更愿意建立 Boost.Asio 使用单独的编译后的源代码。若要执行此操作,请添加#include <boost/asio/impl/src.hpp>对程序中的一个 (且只有一个) 源代码文件,然后生成程序与BOOST_ASIO_SEPARATE_COMPILATION项目/编译器设置中定义。或者,可以定义BOOST_ASIO_DYN_LINK打造单独编译的 Boost.Asio 作为共享库的一部分。
如果使用 Boost.Asio 的 SSL 支持,你还需要添加#include <boost/asio/ssl/impl/src.hpp>.
宏
在下表中列出的宏可能用于控制 Boost.Asio 的行为。
宏观
描述
BOOST_ASIO_ENABLE_BUFFER_DEBUGGING
使 Boost.Asio 的缓冲区调试支持,可以帮助识别时无效的缓冲区用于读取或写入操作 (例如如果正在编写一个 std::string 对象被摧毁之前写入操作完成)。
当使用 Microsoft Visual c + +,该宏会自动定义如果启用了调试支持的编译器的迭代器,除非已定义了BOOST_ASIO_DISABLE_BUFFER_DEBUGGING 。
如果启用了标准库调试时使用 g + +,自动定义这个宏 (_GLIBCXX_DEBUG定义),除非已定义了BOOST_ASIO_DISABLE_BUFFER_DEBUGGING 。
BOOST_ASIO_DISABLE_BUFFER_DEBUGGING
显式禁用调试支持的 Boost.Asio 的缓冲区。
BOOST_ASIO_DISABLE_DEV_POLL
显式禁用/dev/poll支持在 Solaris 中,强制使用的select— — 基于实现。
BOOST_ASIO_DISABLE_EPOLL
显式禁用epoll支持在 Linux 中,强制使用的select— — 基于实现。
BOOST_ASIO_DISABLE_EVENTFD
显式用eventfd支持 Linux,迫使管中断阻止 epoll 方面/选择系统调用的使用上。
BOOST_ASIO_DISABLE_KQUEUE
显式禁用kqueue支持在 Mac OS X 和 BSD 的变种,强制使用的select— — 基于实现。
BOOST_ASIO_DISABLE_IOCP
显式禁用 Windows,迫使的select使用 I/O 完成端口支持-基础实施。
BOOST_ASIO_DISABLE_THREADS
显式禁用 Boost.Asio 线程支持,独立的提升作为一个整体支持线程。
BOOST_ASIO_NO_WIN32_LEAN_AND_MEAN
默认情况下,Boost.Asio 将自动定义WIN32_LEAN_AND_MEAN ,Windows,尽量减少 Windows SDK 头文件和包含的特征数目进行编译时。BOOST_ASIO_NO_WIN32_LEAN_AND_MEAN的存在可以防止WIN32_LEAN_AND_MEAN被定义。
BOOST_ASIO_NO_NOMINMAX
默认情况下,Boost.Asio 将自动定义NOMINMAX为窗口,以抑制min()和max()宏的定义编译时。BOOST_ASIO_NO_NOMINMAX的存在可以防止NOMINMAX被定义。
BOOST_ASIO_NO_DEFAULT_LINKED_LIBS
在编译时为 Windows 使用 Microsoft Visual c + + 或 Borland c + +,Boost.Asio 将自动链接中所需的 Windows SDK 程序库 (即ws2_32.lib和mswsock.lib或ws2.lib当生成 Windows CE) 的套接字支持。BOOST_ASIO_NO_DEFAULT_LINKED_LIBS宏可以防止这些库被联系在一起。
BOOST_ASIO_SOCKET_STREAMBUF_MAX_ARITY
确定可能传递给basic_socket_streambuf类模板connect成员函数的参数的最大数目。默认值为 5。
BOOST_ASIO_SOCKET_IOSTREAM_MAX_ARITY
确定可能传递给basic_socket_iostream类模板构造函数和connect成员函数的参数的最大数目。默认值为 5。
BOOST_ASIO_ENABLE_CANCELIO
使用户能够使用较早版本的 Windows CancelIo函数。如果未启用,对上一个套接字对象cancel()的调用将始终失败与asio::error::operation_not_supported在 Windows XP、 Windows Server 2003 和早期版本的 Windows 上运行时。当总是使用运行在 Windows Vista,Windows Server 2008,和以后, CancelIoEx函数上。
CancelIo函数具有使其使用之前,应考虑的两个问题︰
* 它只将取消了当前线程中启动的异步操作
* 它可以显示完成没有错误,但是要取消未完成的操作的请求可能会忽略由操作系统。它是否工作似乎取决于安装的驱动程序。
便携式的取消,请考虑使用以下替代方法之一︰
* 通过定义 BOOST_ASIO_DISABLE_IOCP 禁用澳洲的 I/O 完成端口后端。
* 使用套接字对象的 close () 函数来同时取消未完成的操作并关闭套接字。
BOOST_ASIO_NO_TYPEID
禁用在 Boost.Asiotypeid运算符的用法。如果BOOST_NO_TYPEID被定义,定义自动。
BOOST_ASIO_HASH_MAP_BUCKETS
确定 Boost.Asio 的内部hash_map对象中存储桶的数目。值应为质数,升序排列的用逗号分隔列表。hash_map执行会自动增加作为地图增加中的元素数的存储桶的数目。
一些例子︰
* 定义BOOST_ASIO_HASH_MAP_BUCKETS到1021意味着hash_map对象将始终包含 1021 水桶,不论在映射中的元素的数目。
* 定义BOOST_ASIO_HASH_MAP_BUCKETS到53,389,1543意味着hash_map对象将最初包含 53 桶。存储桶的数目将增至 389,然后 1543年向地图添加元素。
Boost.Asio教程 0
于 2017-05-07 13:40:41 首次发布