3 <meta http-equiv="Content-Type" content="text/html; charset=US-ASCII">
4 <title>Networking</title>
5 <link rel="stylesheet" href="../../../../../doc/src/boostbook.css" type="text/css">
6 <meta name="generator" content="DocBook XSL Stylesheets V1.79.1">
7 <link rel="home" href="../index.html" title="Chapter 1. Boost.Beast">
8 <link rel="up" href="../index.html" title="Chapter 1. Boost.Beast">
9 <link rel="prev" href="examples.html" title="Examples">
10 <link rel="next" href="using_io/asio_refresher.html" title="Refresher">
12 <body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF">
13 <table cellpadding="2" width="100%"><tr>
14 <td valign="top"><img alt="Boost C++ Libraries" width="277" height="86" src="../../../../../boost.png"></td>
15 <td align="center"><a href="../../../../../index.html">Home</a></td>
16 <td align="center"><a href="../../../../../libs/libraries.htm">Libraries</a></td>
17 <td align="center"><a href="http://www.boost.org/users/people.html">People</a></td>
18 <td align="center"><a href="http://www.boost.org/users/faq.html">FAQ</a></td>
19 <td align="center"><a href="../../../../../more/index.htm">More</a></td>
22 <div class="spirit-nav">
23 <a accesskey="p" href="examples.html"><img src="../../../../../doc/src/images/prev.png" alt="Prev"></a><a accesskey="u" href="../index.html"><img src="../../../../../doc/src/images/up.png" alt="Up"></a><a accesskey="h" href="../index.html"><img src="../../../../../doc/src/images/home.png" alt="Home"></a><a accesskey="n" href="using_io/asio_refresher.html"><img src="../../../../../doc/src/images/next.png" alt="Next"></a>
26 <div class="titlepage"><div><div><h2 class="title" style="clear: both">
27 <a name="beast.using_io"></a><a class="link" href="using_io.html" title="Networking">Networking</a>
28 </h2></div></div></div>
30 This library uses the <a href="http://cplusplus.github.io/networking-ts/draft.pdf" target="_top">Networking
31 Technical Specification</a>, scheduled to become an official part of C++
32 no sooner than the year 2023. Three implementations exist, with cosmetic differences
33 but otherwise using the same function signatures and type declarations: Boost.Asio,
34 stand-alone Asio, and networking-ts-impl. This table shows how a variable of
35 type <code class="computeroutput"><span class="identifier">io_context</span></code> is declared
36 in each implementation by including the appropriate header and using a suitable
40 <a name="beast.using_io.networking_implementations"></a><p class="title"><b>Table 1.2. Networking Implementations</b></p>
41 <div class="table-contents"><table class="table" summary="Networking Implementations">
54 Namespace and Header Example
62 <a href="../../../../../libs/asio/index.html" target="_top">Boost.Asio</a>
66 <pre class="programlisting"><span class="preprocessor">#include</span> <span class="special"><</span><span class="identifier">boost</span><span class="special">/</span><span class="identifier">asio</span><span class="special">/</span><span class="identifier">io_context</span><span class="special">.</span><span class="identifier">hpp</span><span class="special">></span>
67 <span class="keyword">namespace</span> <span class="identifier">net</span> <span class="special">=</span> <span class="identifier">boost</span><span class="special">::</span><span class="identifier">asio</span><span class="special">;</span>
68 <span class="identifier">net</span><span class="special">::</span><span class="identifier">io_context</span> <span class="identifier">ioc</span><span class="special">;</span>
75 <a href="https://think-async.com/Asio/" target="_top">Asio (Standalone)</a>
79 <pre class="programlisting"><span class="preprocessor">#include</span> <span class="special"><</span><span class="identifier">asio</span><span class="special">/</span><span class="identifier">io_context</span><span class="special">.</span><span class="identifier">hpp</span><span class="special">></span>
80 <span class="keyword">namespace</span> <span class="identifier">net</span> <span class="special">=</span> <span class="identifier">asio</span><span class="special">;</span>
81 <span class="identifier">net</span><span class="special">::</span><span class="identifier">io_context</span> <span class="identifier">ioc</span><span class="special">;</span>
88 <a href="https://github.com/chriskohlhoff/networking-ts-impl" target="_top">networking-ts-impl</a>
92 <pre class="programlisting"><span class="preprocessor">#include</span> <span class="special"><</span><span class="identifier">experimental</span><span class="special">/</span><span class="identifier">io_context</span><span class="special">></span>
93 <span class="keyword">namespace</span> <span class="identifier">net</span> <span class="special">=</span> <span class="identifier">std</span><span class="special">::</span><span class="identifier">experimental</span><span class="special">::</span><span class="identifier">net</span><span class="special">;</span>
94 <span class="identifier">net</span><span class="special">::</span><span class="identifier">io_context</span> <span class="identifier">ioc</span><span class="special">;</span>
101 <br class="table-break"><p>
102 This document refers to the three implementations above interchangeably and
103 collectively as <span class="bold"><strong>Networking</strong></span> (or just <span class="emphasis"><em>networking</em></span>).
104 The Boost.Asio and Asio flavors of Networking provide additional features not
105 currently proposed for C++, but likely to appear in a future specification,
108 <div class="itemizedlist"><ul class="itemizedlist" style="list-style-type: disc; ">
109 <li class="listitem">
110 <a href="../../../../../doc/html/boost_asio/reference/serial_port.html" target="_top">Serial
113 <li class="listitem">
114 <a href="../../../../../doc/html/boost_asio/reference/local__stream_protocol.html" target="_top">UNIX
117 <li class="listitem">
118 <a href="../../../../../doc/html/boost_asio/reference/signal_set.html" target="_top">POSIX
119 signals</a> (e.g. SIGINT, SIGABORT)
121 <li class="listitem">
122 <a href="../../../../../doc/html/boost_asio/reference/ssl__stream.html" target="_top">TLS
123 streams</a> (such as OpenSSL)
127 Boost.Beast depends specifically on the Boost.Asio flavor of Networking, although
128 this may change in the future. While this library offers performant implementations
129 of the HTTP and WebSocket network protocols, it depends on the networking interfaces
130 to perform general tasks such as performing domain name resolution (DNS lookup),
131 establishing outgoing connections, and accepting incoming connections. Callers
132 are responsible for interacting with networking to initialize objects to the
133 correct state where they are usable by this library.
136 In this documentation, the example code, and the implementation, the <code class="computeroutput"><span class="identifier">net</span></code> namespace is used to qualify Networking
137 identifiers. For Boost.Beast, <code class="computeroutput"><span class="identifier">net</span></code>
138 will be an alias for the <code class="computeroutput"><span class="identifier">boost</span><span class="special">::</span><span class="identifier">asio</span></code> namespace.
141 To further ease of use, this library provides an extensive collection of types
142 and algorithms. This section of the documentation explains these types and
143 algorithms, provides examples of usage, and also provides refreshers and tutorials
144 for working with networking.
147 <a name="beast.using_io.h0"></a>
148 <span class="phrase"><a name="beast.using_io.abbreviations"></a></span><a class="link" href="using_io.html#beast.using_io.abbreviations">Abbreviations</a>
151 This documentation assumes familiarity with <a href="../../../../../libs/asio/index.html" target="_top">Boost.Asio</a>,
152 which is required to work with Beast. Sample code and identifiers used throughout
153 are written as if the following declarations are in effect:
155 <pre class="programlisting"><span class="preprocessor">#include</span> <span class="special"><</span><span class="identifier">boost</span><span class="special">/</span><span class="identifier">beast</span><span class="special">/</span><span class="identifier">core</span><span class="special">.</span><span class="identifier">hpp</span><span class="special">></span>
156 <span class="preprocessor">#include</span> <span class="special"><</span><span class="identifier">boost</span><span class="special">/</span><span class="identifier">asio</span><span class="special">.</span><span class="identifier">hpp</span><span class="special">></span>
157 <span class="preprocessor">#include</span> <span class="special"><</span><span class="identifier">boost</span><span class="special">/</span><span class="identifier">asio</span><span class="special">/</span><span class="identifier">ssl</span><span class="special">.</span><span class="identifier">hpp</span><span class="special">></span>
158 <span class="preprocessor">#include</span> <span class="special"><</span><span class="identifier">iostream</span><span class="special">></span>
159 <span class="preprocessor">#include</span> <span class="special"><</span><span class="identifier">thread</span><span class="special">></span>
161 <pre class="programlisting"><span class="comment">//</span>
162 <span class="keyword">using</span> <span class="keyword">namespace</span> <span class="identifier">boost</span><span class="special">::</span><span class="identifier">beast</span><span class="special">;</span>
163 <span class="keyword">namespace</span> <span class="identifier">net</span> <span class="special">=</span> <span class="identifier">boost</span><span class="special">::</span><span class="identifier">asio</span><span class="special">;</span>
164 <span class="keyword">namespace</span> <span class="identifier">ssl</span> <span class="special">=</span> <span class="identifier">boost</span><span class="special">::</span><span class="identifier">asio</span><span class="special">::</span><span class="identifier">ssl</span><span class="special">;</span>
165 <span class="keyword">using</span> <span class="identifier">tcp</span> <span class="special">=</span> <span class="identifier">net</span><span class="special">::</span><span class="identifier">ip</span><span class="special">::</span><span class="identifier">tcp</span><span class="special">;</span>
167 <span class="identifier">net</span><span class="special">::</span><span class="identifier">io_context</span> <span class="identifier">ioc</span><span class="special">;</span>
168 <span class="keyword">auto</span> <span class="identifier">work</span> <span class="special">=</span> <span class="identifier">net</span><span class="special">::</span><span class="identifier">make_work_guard</span><span class="special">(</span><span class="identifier">ioc</span><span class="special">);</span>
169 <span class="identifier">std</span><span class="special">::</span><span class="identifier">thread</span> <span class="identifier">t</span><span class="special">{[&](){</span> <span class="identifier">ioc</span><span class="special">.</span><span class="identifier">run</span><span class="special">();</span> <span class="special">}};</span>
171 <span class="identifier">error_code</span> <span class="identifier">ec</span><span class="special">;</span>
172 <span class="identifier">tcp</span><span class="special">::</span><span class="identifier">socket</span> <span class="identifier">sock</span><span class="special">{</span><span class="identifier">ioc</span><span class="special">};</span>
178 <table xmlns:rev="http://www.cs.rpi.edu/~gregod/boost/tools/doc/revision" width="100%"><tr>
179 <td align="left"></td>
180 <td align="right"><div class="copyright-footer">Copyright © 2016-2019 Vinnie
182 Distributed under the Boost Software License, Version 1.0. (See accompanying
183 file LICENSE_1_0.txt or copy at <a href="http://www.boost.org/LICENSE_1_0.txt" target="_top">http://www.boost.org/LICENSE_1_0.txt</a>)
188 <div class="spirit-nav">
189 <a accesskey="p" href="examples.html"><img src="../../../../../doc/src/images/prev.png" alt="Prev"></a><a accesskey="u" href="../index.html"><img src="../../../../../doc/src/images/up.png" alt="Up"></a><a accesskey="h" href="../index.html"><img src="../../../../../doc/src/images/home.png" alt="Home"></a><a accesskey="n" href="using_io/asio_refresher.html"><img src="../../../../../doc/src/images/next.png" alt="Next"></a>