Imported Upstream version 1.72.0
[platform/upstream/boost.git] / libs / beast / doc / html / beast / using_io / layered_streams / counted_stream_example.html
1 <html>
2 <head>
3 <meta http-equiv="Content-Type" content="text/html; charset=US-ASCII">
4 <title>Counted Stream &#128161;</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&#160;1.&#160;Boost.Beast">
8 <link rel="up" href="../layered_streams.html" title="Layered Streams">
9 <link rel="prev" href="../layered_streams.html" title="Layered Streams">
10 <link rel="next" href="../buffer_types.html" title="Buffer Types">
11 </head>
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>
20 </tr></table>
21 <hr>
22 <div class="spirit-nav">
23 <a accesskey="p" href="../layered_streams.html"><img src="../../../../../../../doc/src/images/prev.png" alt="Prev"></a><a accesskey="u" href="../layered_streams.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="../buffer_types.html"><img src="../../../../../../../doc/src/images/next.png" alt="Next"></a>
24 </div>
25 <div class="section">
26 <div class="titlepage"><div><div><h4 class="title">
27 <a name="beast.using_io.layered_streams.counted_stream_example"></a><a class="link" href="counted_stream_example.html" title="Counted Stream &#128161;">Counted
28         Stream &#128161;</a>
29 </h4></div></div></div>
30 <p>
31           This example shows the definition of a layered stream which keeps individual
32           counts of the total number of bytes read from and written to the next layer.
33           It meets the requirements for synchronous and asynchronous read and write
34           streams:
35         </p>
36 <pre class="programlisting"><span class="comment">// A layered stream which counts the bytes read and bytes written on the next layer</span>
37 <span class="keyword">template</span> <span class="special">&lt;</span><span class="keyword">class</span> <span class="identifier">NextLayer</span><span class="special">&gt;</span>
38 <span class="keyword">class</span> <span class="identifier">counted_stream</span>
39 <span class="special">{</span>
40     <span class="identifier">NextLayer</span> <span class="identifier">next_layer_</span><span class="special">;</span>              <span class="comment">// Reads and writes are passed through to this</span>
41     <span class="identifier">std</span><span class="special">::</span><span class="identifier">size_t</span> <span class="identifier">bytes_read_</span> <span class="special">=</span> <span class="number">0</span><span class="special">;</span>        <span class="comment">// Holds the total bytes read</span>
42     <span class="identifier">std</span><span class="special">::</span><span class="identifier">size_t</span> <span class="identifier">bytes_written_</span> <span class="special">=</span> <span class="number">0</span><span class="special">;</span>     <span class="comment">// Holds the total bytes written</span>
43
44     <span class="comment">// This is the "initiation" object passed to async_initiate to start the operation</span>
45     <span class="keyword">struct</span> <span class="identifier">run_read_op</span>
46     <span class="special">{</span>
47         <span class="keyword">template</span><span class="special">&lt;</span>
48             <span class="keyword">class</span> <span class="identifier">ReadHandler</span><span class="special">,</span>
49             <span class="keyword">class</span> <span class="identifier">MutableBufferSequence</span><span class="special">&gt;</span>
50         <span class="keyword">void</span>
51         <span class="keyword">operator</span><span class="special">()(</span>
52             <span class="identifier">ReadHandler</span><span class="special">&amp;&amp;</span> <span class="identifier">handler</span><span class="special">,</span>
53             <span class="identifier">counted_stream</span><span class="special">*</span> <span class="identifier">stream</span><span class="special">,</span>
54             <span class="identifier">MutableBufferSequence</span> <span class="keyword">const</span><span class="special">&amp;</span> <span class="identifier">buffers</span><span class="special">)</span>
55         <span class="special">{</span>
56             <span class="keyword">using</span> <span class="identifier">handler_type</span> <span class="special">=</span> <span class="keyword">typename</span> <span class="identifier">std</span><span class="special">::</span><span class="identifier">decay</span><span class="special">&lt;</span><span class="identifier">ReadHandler</span><span class="special">&gt;::</span><span class="identifier">type</span><span class="special">;</span>
57
58             <span class="comment">// async_base handles all of the composed operation boilerplate for us</span>
59             <span class="keyword">using</span> <span class="identifier">base</span> <span class="special">=</span> <span class="identifier">async_base</span><span class="special">&lt;</span>
60                 <span class="identifier">handler_type</span><span class="special">,</span> <span class="identifier">beast</span><span class="special">::</span><span class="identifier">executor_type</span><span class="special">&lt;</span><span class="identifier">NextLayer</span><span class="special">&gt;&gt;;</span>
61
62             <span class="comment">// Our composed operation is implemented as a completion handler object</span>
63             <span class="keyword">struct</span> <span class="identifier">op</span> <span class="special">:</span> <span class="identifier">base</span>
64             <span class="special">{</span>
65                 <span class="identifier">counted_stream</span><span class="special">&amp;</span> <span class="identifier">stream_</span><span class="special">;</span>
66
67                 <span class="identifier">op</span><span class="special">(</span> <span class="identifier">counted_stream</span><span class="special">&amp;</span> <span class="identifier">stream</span><span class="special">,</span>
68                     <span class="identifier">handler_type</span><span class="special">&amp;&amp;</span> <span class="identifier">handler</span><span class="special">,</span>
69                     <span class="identifier">MutableBufferSequence</span> <span class="keyword">const</span><span class="special">&amp;</span> <span class="identifier">buffers</span><span class="special">)</span>
70                     <span class="special">:</span> <span class="identifier">base</span><span class="special">(</span><span class="identifier">std</span><span class="special">::</span><span class="identifier">move</span><span class="special">(</span><span class="identifier">handler</span><span class="special">),</span> <span class="identifier">stream</span><span class="special">.</span><span class="identifier">get_executor</span><span class="special">())</span>
71                     <span class="special">,</span> <span class="identifier">stream_</span><span class="special">(</span><span class="identifier">stream</span><span class="special">)</span>
72                 <span class="special">{</span>
73                     <span class="comment">// Start the asynchronous operation</span>
74                     <span class="identifier">stream_</span><span class="special">.</span><span class="identifier">next_layer</span><span class="special">().</span><span class="identifier">async_read_some</span><span class="special">(</span><span class="identifier">buffers</span><span class="special">,</span> <span class="identifier">std</span><span class="special">::</span><span class="identifier">move</span><span class="special">(*</span><span class="keyword">this</span><span class="special">));</span>
75                 <span class="special">}</span>
76
77                 <span class="keyword">void</span> <span class="keyword">operator</span><span class="special">()(</span><span class="identifier">error_code</span> <span class="identifier">ec</span><span class="special">,</span> <span class="identifier">std</span><span class="special">::</span><span class="identifier">size_t</span> <span class="identifier">bytes_transferred</span><span class="special">)</span>
78                 <span class="special">{</span>
79                     <span class="comment">// Count the bytes transferred towards the total</span>
80                     <span class="identifier">stream_</span><span class="special">.</span><span class="identifier">bytes_read_</span> <span class="special">+=</span> <span class="identifier">bytes_transferred</span><span class="special">;</span>
81
82                     <span class="keyword">this</span><span class="special">-&gt;</span><span class="identifier">complete_now</span><span class="special">(</span><span class="identifier">ec</span><span class="special">,</span> <span class="identifier">bytes_transferred</span><span class="special">);</span>
83                 <span class="special">}</span>
84             <span class="special">};</span>
85
86             <span class="identifier">op</span><span class="special">(*</span><span class="identifier">stream</span><span class="special">,</span> <span class="identifier">std</span><span class="special">::</span><span class="identifier">forward</span><span class="special">&lt;</span><span class="identifier">ReadHandler</span><span class="special">&gt;(</span><span class="identifier">handler</span><span class="special">),</span> <span class="identifier">buffers</span><span class="special">);</span>
87         <span class="special">}</span>
88     <span class="special">};</span>
89
90     <span class="comment">// This is the "initiation" object passed to async_initiate to start the operation</span>
91     <span class="keyword">struct</span> <span class="identifier">run_write_op</span>
92     <span class="special">{</span>
93         <span class="keyword">template</span><span class="special">&lt;</span>
94             <span class="keyword">class</span> <span class="identifier">WriteHandler</span><span class="special">,</span>
95             <span class="keyword">class</span> <span class="identifier">ConstBufferSequence</span><span class="special">&gt;</span>
96         <span class="keyword">void</span>
97         <span class="keyword">operator</span><span class="special">()(</span>
98             <span class="identifier">WriteHandler</span><span class="special">&amp;&amp;</span> <span class="identifier">handler</span><span class="special">,</span>
99             <span class="identifier">counted_stream</span><span class="special">*</span> <span class="identifier">stream</span><span class="special">,</span>
100             <span class="identifier">ConstBufferSequence</span> <span class="keyword">const</span><span class="special">&amp;</span> <span class="identifier">buffers</span><span class="special">)</span>
101         <span class="special">{</span>
102             <span class="keyword">using</span> <span class="identifier">handler_type</span> <span class="special">=</span> <span class="keyword">typename</span> <span class="identifier">std</span><span class="special">::</span><span class="identifier">decay</span><span class="special">&lt;</span><span class="identifier">WriteHandler</span><span class="special">&gt;::</span><span class="identifier">type</span><span class="special">;</span>
103
104             <span class="comment">// async_base handles all of the composed operation boilerplate for us</span>
105             <span class="keyword">using</span> <span class="identifier">base</span> <span class="special">=</span> <span class="identifier">async_base</span><span class="special">&lt;</span>
106                 <span class="identifier">handler_type</span><span class="special">,</span> <span class="identifier">beast</span><span class="special">::</span><span class="identifier">executor_type</span><span class="special">&lt;</span><span class="identifier">NextLayer</span><span class="special">&gt;&gt;;</span>
107
108             <span class="comment">// Our composed operation is implemented as a completion handler object</span>
109             <span class="keyword">struct</span> <span class="identifier">op</span> <span class="special">:</span> <span class="identifier">base</span>
110             <span class="special">{</span>
111                 <span class="identifier">counted_stream</span><span class="special">&amp;</span> <span class="identifier">stream_</span><span class="special">;</span>
112
113                 <span class="identifier">op</span><span class="special">(</span> <span class="identifier">counted_stream</span><span class="special">&amp;</span> <span class="identifier">stream</span><span class="special">,</span>
114                     <span class="identifier">handler_type</span><span class="special">&amp;&amp;</span> <span class="identifier">handler</span><span class="special">,</span>
115                     <span class="identifier">ConstBufferSequence</span> <span class="keyword">const</span><span class="special">&amp;</span> <span class="identifier">buffers</span><span class="special">)</span>
116                     <span class="special">:</span> <span class="identifier">base</span><span class="special">(</span><span class="identifier">std</span><span class="special">::</span><span class="identifier">move</span><span class="special">(</span><span class="identifier">handler</span><span class="special">),</span> <span class="identifier">stream</span><span class="special">.</span><span class="identifier">get_executor</span><span class="special">())</span>
117                     <span class="special">,</span> <span class="identifier">stream_</span><span class="special">(</span><span class="identifier">stream</span><span class="special">)</span>
118                 <span class="special">{</span>
119                     <span class="comment">// Start the asynchronous operation</span>
120                     <span class="identifier">stream_</span><span class="special">.</span><span class="identifier">next_layer</span><span class="special">().</span><span class="identifier">async_write_some</span><span class="special">(</span><span class="identifier">buffers</span><span class="special">,</span> <span class="identifier">std</span><span class="special">::</span><span class="identifier">move</span><span class="special">(*</span><span class="keyword">this</span><span class="special">));</span>
121                 <span class="special">}</span>
122
123                 <span class="keyword">void</span> <span class="keyword">operator</span><span class="special">()(</span><span class="identifier">error_code</span> <span class="identifier">ec</span><span class="special">,</span> <span class="identifier">std</span><span class="special">::</span><span class="identifier">size_t</span> <span class="identifier">bytes_transferred</span><span class="special">)</span>
124                 <span class="special">{</span>
125                     <span class="comment">// Count the bytes transferred towards the total</span>
126                     <span class="identifier">stream_</span><span class="special">.</span><span class="identifier">bytes_written_</span> <span class="special">+=</span> <span class="identifier">bytes_transferred</span><span class="special">;</span>
127
128                     <span class="keyword">this</span><span class="special">-&gt;</span><span class="identifier">complete_now</span><span class="special">(</span><span class="identifier">ec</span><span class="special">,</span> <span class="identifier">bytes_transferred</span><span class="special">);</span>
129                 <span class="special">}</span>
130             <span class="special">};</span>
131
132             <span class="identifier">op</span><span class="special">(*</span><span class="identifier">stream</span><span class="special">,</span> <span class="identifier">std</span><span class="special">::</span><span class="identifier">forward</span><span class="special">&lt;</span><span class="identifier">WriteHandler</span><span class="special">&gt;(</span><span class="identifier">handler</span><span class="special">),</span> <span class="identifier">buffers</span><span class="special">);</span>
133         <span class="special">}</span>
134     <span class="special">};</span>
135
136 <span class="keyword">public</span><span class="special">:</span>
137     <span class="comment">/// The type of executor used by this stream</span>
138     <span class="keyword">using</span> <span class="identifier">executor_type</span> <span class="special">=</span> <span class="identifier">beast</span><span class="special">::</span><span class="identifier">executor_type</span><span class="special">&lt;</span><span class="identifier">NextLayer</span><span class="special">&gt;;</span>
139
140     <span class="comment">/// Constructor</span>
141     <span class="keyword">template</span> <span class="special">&lt;</span><span class="keyword">class</span><span class="special">...</span> <span class="identifier">Args</span><span class="special">&gt;</span>
142     <span class="keyword">explicit</span>
143     <span class="identifier">counted_stream</span><span class="special">(</span><span class="identifier">Args</span><span class="special">&amp;&amp;...</span> <span class="identifier">args</span><span class="special">)</span>
144         <span class="special">:</span> <span class="identifier">next_layer_</span><span class="special">(</span><span class="identifier">std</span><span class="special">::</span><span class="identifier">forward</span><span class="special">&lt;</span><span class="identifier">Args</span><span class="special">&gt;(</span><span class="identifier">args</span><span class="special">)...)</span>
145     <span class="special">{</span>
146     <span class="special">}</span>
147
148     <span class="comment">/// Returns an instance of the executor used to submit completion handlers</span>
149     <span class="identifier">executor_type</span> <span class="identifier">get_executor</span><span class="special">()</span> <span class="keyword">noexcept</span>
150     <span class="special">{</span>
151         <span class="keyword">return</span> <span class="identifier">next_layer_</span><span class="special">.</span><span class="identifier">get_executor</span><span class="special">();</span>
152     <span class="special">}</span>
153
154     <span class="comment">/// Returns a reference to the next layer</span>
155     <span class="identifier">NextLayer</span><span class="special">&amp;</span> <span class="identifier">next_layer</span><span class="special">()</span> <span class="keyword">noexcept</span>
156     <span class="special">{</span>
157         <span class="keyword">return</span> <span class="identifier">next_layer_</span><span class="special">;</span>
158     <span class="special">}</span>
159
160     <span class="comment">/// Returns a reference to the next layer</span>
161     <span class="identifier">NextLayer</span> <span class="keyword">const</span><span class="special">&amp;</span> <span class="identifier">next_layer</span><span class="special">()</span> <span class="keyword">const</span> <span class="keyword">noexcept</span>
162     <span class="special">{</span>
163         <span class="keyword">return</span> <span class="identifier">next_layer_</span><span class="special">;</span>
164     <span class="special">}</span>
165
166     <span class="comment">/// Returns the total number of bytes read since the stream was constructed</span>
167     <span class="identifier">std</span><span class="special">::</span><span class="identifier">size_t</span> <span class="identifier">bytes_read</span><span class="special">()</span> <span class="keyword">const</span> <span class="keyword">noexcept</span>
168     <span class="special">{</span>
169         <span class="keyword">return</span> <span class="identifier">bytes_read_</span><span class="special">;</span>
170     <span class="special">}</span>
171
172     <span class="comment">/// Returns the total number of bytes written since the stream was constructed</span>
173     <span class="identifier">std</span><span class="special">::</span><span class="identifier">size_t</span> <span class="identifier">bytes_written</span><span class="special">()</span> <span class="keyword">const</span> <span class="keyword">noexcept</span>
174     <span class="special">{</span>
175         <span class="keyword">return</span> <span class="identifier">bytes_written_</span><span class="special">;</span>
176     <span class="special">}</span>
177
178     <span class="comment">/// Read some data from the stream</span>
179     <span class="keyword">template</span> <span class="special">&lt;</span><span class="keyword">class</span> <span class="identifier">MutableBufferSequence</span><span class="special">&gt;</span>
180     <span class="identifier">std</span><span class="special">::</span><span class="identifier">size_t</span> <span class="identifier">read_some</span><span class="special">(</span><span class="identifier">MutableBufferSequence</span> <span class="keyword">const</span><span class="special">&amp;</span> <span class="identifier">buffers</span><span class="special">)</span>
181     <span class="special">{</span>
182         <span class="keyword">auto</span> <span class="keyword">const</span> <span class="identifier">bytes_transferred</span> <span class="special">=</span> <span class="identifier">next_layer_</span><span class="special">.</span><span class="identifier">read_some</span><span class="special">(</span><span class="identifier">buffers</span><span class="special">);</span>
183         <span class="identifier">bytes_read_</span> <span class="special">+=</span> <span class="identifier">bytes_transferred</span><span class="special">;</span>
184         <span class="keyword">return</span> <span class="identifier">bytes_transferred</span><span class="special">;</span>
185     <span class="special">}</span>
186
187     <span class="comment">/// Read some data from the stream</span>
188     <span class="keyword">template</span> <span class="special">&lt;</span><span class="keyword">class</span> <span class="identifier">MutableBufferSequence</span><span class="special">&gt;</span>
189     <span class="identifier">std</span><span class="special">::</span><span class="identifier">size_t</span> <span class="identifier">read_some</span><span class="special">(</span><span class="identifier">MutableBufferSequence</span> <span class="keyword">const</span><span class="special">&amp;</span> <span class="identifier">buffers</span><span class="special">,</span> <span class="identifier">error_code</span><span class="special">&amp;</span> <span class="identifier">ec</span><span class="special">)</span>
190     <span class="special">{</span>
191         <span class="keyword">auto</span> <span class="keyword">const</span> <span class="identifier">bytes_transferred</span> <span class="special">=</span> <span class="identifier">next_layer_</span><span class="special">.</span><span class="identifier">read_some</span><span class="special">(</span><span class="identifier">buffers</span><span class="special">,</span> <span class="identifier">ec</span><span class="special">);</span>
192         <span class="identifier">bytes_read_</span> <span class="special">+=</span> <span class="identifier">bytes_transferred</span><span class="special">;</span>
193         <span class="keyword">return</span> <span class="identifier">bytes_transferred</span><span class="special">;</span>
194     <span class="special">}</span>
195
196     <span class="comment">/// Write some data to the stream</span>
197     <span class="keyword">template</span> <span class="special">&lt;</span><span class="keyword">class</span> <span class="identifier">ConstBufferSequence</span><span class="special">&gt;</span>
198     <span class="identifier">std</span><span class="special">::</span><span class="identifier">size_t</span> <span class="identifier">write_some</span><span class="special">(</span><span class="identifier">ConstBufferSequence</span> <span class="keyword">const</span><span class="special">&amp;</span> <span class="identifier">buffers</span><span class="special">)</span>
199     <span class="special">{</span>
200         <span class="keyword">auto</span> <span class="keyword">const</span> <span class="identifier">bytes_transferred</span> <span class="special">=</span> <span class="identifier">next_layer_</span><span class="special">.</span><span class="identifier">write_some</span><span class="special">(</span><span class="identifier">buffers</span><span class="special">);</span>
201         <span class="identifier">bytes_written_</span> <span class="special">+=</span> <span class="identifier">bytes_transferred</span><span class="special">;</span>
202         <span class="keyword">return</span> <span class="identifier">bytes_transferred</span><span class="special">;</span>
203     <span class="special">}</span>
204
205     <span class="comment">/// Write some data to the stream</span>
206     <span class="keyword">template</span> <span class="special">&lt;</span><span class="keyword">class</span> <span class="identifier">ConstBufferSequence</span><span class="special">&gt;</span>
207     <span class="identifier">std</span><span class="special">::</span><span class="identifier">size_t</span> <span class="identifier">write_some</span><span class="special">(</span><span class="identifier">ConstBufferSequence</span> <span class="keyword">const</span><span class="special">&amp;</span> <span class="identifier">buffers</span><span class="special">,</span> <span class="identifier">error_code</span><span class="special">&amp;</span> <span class="identifier">ec</span><span class="special">)</span>
208     <span class="special">{</span>
209         <span class="keyword">auto</span> <span class="keyword">const</span> <span class="identifier">bytes_transferred</span> <span class="special">=</span> <span class="identifier">next_layer_</span><span class="special">.</span><span class="identifier">write_some</span><span class="special">(</span><span class="identifier">buffers</span><span class="special">,</span> <span class="identifier">ec</span><span class="special">);</span>
210         <span class="identifier">bytes_written_</span> <span class="special">+=</span> <span class="identifier">bytes_transferred</span><span class="special">;</span>
211         <span class="keyword">return</span> <span class="identifier">bytes_transferred</span><span class="special">;</span>
212     <span class="special">}</span>
213
214     <span class="comment">/// Read some data from the stream asynchronously</span>
215     <span class="keyword">template</span><span class="special">&lt;</span>
216         <span class="keyword">class</span> <span class="identifier">MutableBufferSequence</span><span class="special">,</span>
217         <span class="keyword">class</span> <span class="identifier">ReadHandler</span> <span class="special">=</span>
218             <span class="identifier">net</span><span class="special">::</span><span class="identifier">default_completion_token_t</span><span class="special">&lt;</span><span class="identifier">executor_type</span><span class="special">&gt;&gt;</span>
219     <span class="identifier">BOOST_BEAST_ASYNC_RESULT2</span><span class="special">(</span><span class="identifier">ReadHandler</span><span class="special">)</span>
220     <span class="identifier">async_read_some</span><span class="special">(</span>
221         <span class="identifier">MutableBufferSequence</span> <span class="keyword">const</span><span class="special">&amp;</span> <span class="identifier">buffers</span><span class="special">,</span>
222         <span class="identifier">ReadHandler</span><span class="special">&amp;&amp;</span> <span class="identifier">handler</span> <span class="special">=</span>
223             <span class="identifier">net</span><span class="special">::</span><span class="identifier">default_completion_token_t</span><span class="special">&lt;</span><span class="identifier">executor_type</span><span class="special">&gt;{})</span>
224     <span class="special">{</span>
225         <span class="keyword">return</span> <span class="identifier">net</span><span class="special">::</span><span class="identifier">async_initiate</span><span class="special">&lt;</span>
226             <span class="identifier">ReadHandler</span><span class="special">,</span>
227             <span class="keyword">void</span><span class="special">(</span><span class="identifier">error_code</span><span class="special">,</span> <span class="identifier">std</span><span class="special">::</span><span class="identifier">size_t</span><span class="special">)&gt;(</span>
228                 <span class="identifier">run_read_op</span><span class="special">{},</span>
229                 <span class="identifier">handler</span><span class="special">,</span>
230                 <span class="keyword">this</span><span class="special">,</span>
231                 <span class="identifier">buffers</span><span class="special">);</span>
232     <span class="special">}</span>
233
234     <span class="comment">/// Write some data to the stream asynchronously</span>
235     <span class="keyword">template</span><span class="special">&lt;</span>
236         <span class="keyword">class</span> <span class="identifier">ConstBufferSequence</span><span class="special">,</span>
237         <span class="keyword">class</span> <span class="identifier">WriteHandler</span> <span class="special">=</span>
238             <span class="identifier">net</span><span class="special">::</span><span class="identifier">default_completion_token_t</span><span class="special">&lt;</span><span class="identifier">executor_type</span><span class="special">&gt;&gt;</span>
239     <span class="identifier">BOOST_BEAST_ASYNC_RESULT2</span><span class="special">(</span><span class="identifier">WriteHandler</span><span class="special">)</span>
240     <span class="identifier">async_write_some</span><span class="special">(</span>
241         <span class="identifier">ConstBufferSequence</span> <span class="keyword">const</span><span class="special">&amp;</span> <span class="identifier">buffers</span><span class="special">,</span>
242         <span class="identifier">WriteHandler</span><span class="special">&amp;&amp;</span> <span class="identifier">handler</span> <span class="special">=</span>
243             <span class="identifier">net</span><span class="special">::</span><span class="identifier">default_completion_token_t</span><span class="special">&lt;</span>
244                 <span class="identifier">executor_type</span><span class="special">&gt;{})</span>
245     <span class="special">{</span>
246         <span class="keyword">return</span> <span class="identifier">net</span><span class="special">::</span><span class="identifier">async_initiate</span><span class="special">&lt;</span>
247             <span class="identifier">WriteHandler</span><span class="special">,</span>
248             <span class="keyword">void</span><span class="special">(</span><span class="identifier">error_code</span><span class="special">,</span> <span class="identifier">std</span><span class="special">::</span><span class="identifier">size_t</span><span class="special">)&gt;(</span>
249                 <span class="identifier">run_write_op</span><span class="special">{},</span>
250                 <span class="identifier">handler</span><span class="special">,</span>
251                 <span class="keyword">this</span><span class="special">,</span>
252                 <span class="identifier">buffers</span><span class="special">);</span>
253     <span class="special">}</span>
254 <span class="special">};</span>
255 </pre>
256 </div>
257 <table xmlns:rev="http://www.cs.rpi.edu/~gregod/boost/tools/doc/revision" width="100%"><tr>
258 <td align="left"></td>
259 <td align="right"><div class="copyright-footer">Copyright &#169; 2016-2019 Vinnie
260       Falco<p>
261         Distributed under the Boost Software License, Version 1.0. (See accompanying
262         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>)
263       </p>
264 </div></td>
265 </tr></table>
266 <hr>
267 <div class="spirit-nav">
268 <a accesskey="p" href="../layered_streams.html"><img src="../../../../../../../doc/src/images/prev.png" alt="Prev"></a><a accesskey="u" href="../layered_streams.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="../buffer_types.html"><img src="../../../../../../../doc/src/images/next.png" alt="Next"></a>
269 </div>
270 </body>
271 </html>