3 <meta http-equiv="Content-Type" content="text/html; charset=US-ASCII">
4 <title>basic_stream::rebind_executor::other</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="../boost__beast__basic_stream__rebind_executor.html" title="basic_stream::rebind_executor">
9 <link rel="prev" href="../boost__beast__basic_stream__rebind_executor.html" title="basic_stream::rebind_executor">
10 <link rel="next" href="../boost__beast__basic_stream__timeout_handler.html" title="basic_stream::timeout_handler">
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="../boost__beast__basic_stream__rebind_executor.html"><img src="../../../../../../../doc/src/images/prev.png" alt="Prev"></a><a accesskey="u" href="../boost__beast__basic_stream__rebind_executor.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="../boost__beast__basic_stream__timeout_handler.html"><img src="../../../../../../../doc/src/images/next.png" alt="Next"></a>
26 <div class="titlepage"><div><div><h5 class="title">
27 <a name="beast.ref.boost__beast__basic_stream__rebind_executor.other"></a><a class="link" href="other.html" title="basic_stream::rebind_executor::other">basic_stream::rebind_executor::other</a>
28 </h5></div></div></div>
30 <a class="indexterm" name="idm45873514528736"></a>
31 The stream type when rebound to the specified
35 <a name="beast.ref.boost__beast__basic_stream__rebind_executor.other.h0"></a>
36 <span class="phrase"><a name="beast.ref.boost__beast__basic_stream__rebind_executor.other.synopsis"></a></span><a class="link" href="other.html#beast.ref.boost__beast__basic_stream__rebind_executor.other.synopsis">Synopsis</a>
38 <pre class="programlisting"><span class="keyword">using</span> <span class="identifier">other</span> <span class="special">=</span> <span class="identifier">basic_stream</span><span class="special"><</span> <span class="identifier">Protocol</span><span class="special">,</span> <span class="identifier">Executor1</span><span class="special">,</span> <span class="identifier">RatePolicy</span> <span class="special">>;</span>
41 <a name="beast.ref.boost__beast__basic_stream__rebind_executor.other.h1"></a>
42 <span class="phrase"><a name="beast.ref.boost__beast__basic_stream__rebind_executor.other.types"></a></span><a class="link" href="other.html#beast.ref.boost__beast__basic_stream__rebind_executor.other.types">Types</a>
44 <div class="informaltable"><table class="table">
65 <a class="link" href="../boost__beast__basic_stream__rebind_executor.html" title="basic_stream::rebind_executor"><span class="bold"><strong>rebind_executor</strong></span></a>
70 Rebinds the stream type to another executor.
77 <a class="link" href="../boost__beast__basic_stream/endpoint_type.html" title="basic_stream::endpoint_type"><span class="bold"><strong>endpoint_type</strong></span></a>
89 <a class="link" href="../boost__beast__basic_stream/executor_type.html" title="basic_stream::executor_type"><span class="bold"><strong>executor_type</strong></span></a>
94 The type of the executor associated with the stream.
101 <a class="link" href="../boost__beast__basic_stream/protocol_type.html" title="basic_stream::protocol_type"><span class="bold"><strong>protocol_type</strong></span></a>
113 <a class="link" href="../boost__beast__basic_stream/socket_type.html" title="basic_stream::socket_type"><span class="bold"><strong>socket_type</strong></span></a>
118 The type of the underlying socket.
125 <a name="beast.ref.boost__beast__basic_stream__rebind_executor.other.h2"></a>
126 <span class="phrase"><a name="beast.ref.boost__beast__basic_stream__rebind_executor.other.member_functions"></a></span><a class="link" href="other.html#beast.ref.boost__beast__basic_stream__rebind_executor.other.member_functions">Member
129 <div class="informaltable"><table class="table">
150 <a class="link" href="../boost__beast__basic_stream/async_connect.html" title="basic_stream::async_connect"><span class="bold"><strong>async_connect</strong></span></a>
155 Connect the stream to the specified endpoint asynchronously.
158 Establishes a connection by trying each endpoint in a sequence
166 <a class="link" href="../boost__beast__basic_stream/async_read_some.html" title="basic_stream::async_read_some"><span class="bold"><strong>async_read_some</strong></span></a>
171 Read some data asynchronously.
178 <a class="link" href="../boost__beast__basic_stream/async_write_some.html" title="basic_stream::async_write_some"><span class="bold"><strong>async_write_some</strong></span></a>
183 Write some data asynchronously.
190 <a class="link" href="../boost__beast__basic_stream/basic_stream.html" title="basic_stream::basic_stream"><span class="bold"><strong>basic_stream</strong></span></a>
205 <a class="link" href="../boost__beast__basic_stream/cancel.html" title="basic_stream::cancel"><span class="bold"><strong>cancel</strong></span></a>
210 Cancel all asynchronous operations associated with the socket.
217 <a class="link" href="../boost__beast__basic_stream/close.html" title="basic_stream::close"><span class="bold"><strong>close</strong></span></a>
222 Close the timed stream.
229 <a class="link" href="../boost__beast__basic_stream/connect.html" title="basic_stream::connect"><span class="bold"><strong>connect</strong></span></a>
234 Connect the stream to the specified endpoint.
237 Establishes a connection by trying each endpoint in a sequence.
244 <a class="link" href="../boost__beast__basic_stream/expires_after.html" title="basic_stream::expires_after"><span class="bold"><strong>expires_after</strong></span></a>
249 Set the timeout for the next logical operation.
256 <a class="link" href="../boost__beast__basic_stream/expires_at.html" title="basic_stream::expires_at"><span class="bold"><strong>expires_at</strong></span></a>
261 Set the timeout for the next logical operation.
268 <a class="link" href="../boost__beast__basic_stream/expires_never.html" title="basic_stream::expires_never"><span class="bold"><strong>expires_never</strong></span></a>
273 Disable the timeout for the next logical operation.
280 <a class="link" href="../boost__beast__basic_stream/get_executor.html" title="basic_stream::get_executor"><span class="bold"><strong>get_executor</strong></span></a>
285 Get the executor associated with the object.
292 <a class="link" href="../boost__beast__basic_stream/operator_eq_.html" title="basic_stream::operator="><span class="bold"><strong>operator=</strong></span></a>
297 Move assignment (deleted).
304 <a class="link" href="../boost__beast__basic_stream/rate_policy.html" title="basic_stream::rate_policy"><span class="bold"><strong>rate_policy</strong></span></a>
309 Returns the rate policy associated with the object.
316 <a class="link" href="../boost__beast__basic_stream/read_some.html" title="basic_stream::read_some"><span class="bold"><strong>read_some</strong></span></a>
328 <a class="link" href="../boost__beast__basic_stream/release_socket.html" title="basic_stream::release_socket"><span class="bold"><strong>release_socket</strong></span></a>
333 Release ownership of the underlying socket.
340 <a class="link" href="../boost__beast__basic_stream/socket.html" title="basic_stream::socket"><span class="bold"><strong>socket</strong></span></a>
345 Return a reference to the underlying socket.
352 <a class="link" href="../boost__beast__basic_stream/write_some.html" title="basic_stream::write_some"><span class="bold"><strong>write_some</strong></span></a>
364 <a class="link" href="../boost__beast__basic_stream/basic_stream_dtor_.html" title="basic_stream::~basic_stream"><span class="bold"><strong>~basic_stream</strong></span></a>
376 This stream wraps a <code class="computeroutput"><span class="identifier">net</span><span class="special">::</span><span class="identifier">basic_stream_socket</span></code>
377 to provide the following features:
379 <div class="itemizedlist"><ul class="itemizedlist" style="list-style-type: disc; ">
380 <li class="listitem">
381 An <span class="emphasis"><em>Executor</em></span> may be associated with the stream,
382 which will be used to invoke any completion handlers which do not already
383 have an associated executor. This achieves support for <a href="http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2018/p1322r0.html" target="_top">[P1322R0]
384 Networking TS enhancement to enable custom I/O executors</a>.
386 <li class="listitem">
387 Timeouts may be specified for each logical asynchronous operation performing
388 any reading, writing, or connecting.
390 <li class="listitem">
391 A <span class="emphasis"><em>RatePolicy</em></span> may be associated with the stream,
392 to implement rate limiting through the policy's interface.
396 Although the stream supports multiple concurrent outstanding asynchronous
397 operations, the stream object is not thread-safe. The caller is responsible
398 for ensuring that the stream is accessed from only one thread at a time.
399 This includes the times when the stream, and its underlying socket, are
400 accessed by the networking implementation. To meet this thread safety requirement,
401 all asynchronous operations must be performed by the stream within the
402 same implicit strand (only one thread <code class="computeroutput"><span class="identifier">net</span><span class="special">::</span><span class="identifier">io_context</span><span class="special">::</span><span class="identifier">run</span></code>)
403 or within the same explicit strand, such as an instance of <code class="computeroutput"><span class="identifier">net</span><span class="special">::</span><span class="identifier">strand</span></code>. Completion handlers with explicit
404 associated executors (such as those arising from use of <code class="computeroutput"><span class="identifier">net</span><span class="special">::</span><span class="identifier">bind_executor</span></code>)
405 will be invoked by the stream using the associated executor. Otherwise,
406 the completion handler will be invoked by the executor associated with
407 the stream upon construction. The type of executor used with this stream
408 must meet the following requirements:
410 <div class="itemizedlist"><ul class="itemizedlist" style="list-style-type: disc; "><li class="listitem">
411 Function objects submitted to the executor shall never run concurrently
415 The executor type <code class="computeroutput"><span class="identifier">net</span><span class="special">::</span><span class="identifier">strand</span></code> meets these requirements. Use
416 of a strand as the executor in the stream class template offers an additional
417 notational convenience: the strand does not need to be specified in each
418 individual initiating function call. Unlike other stream wrappers, the
419 underlying socket is accessed through the <a class="link" href="../boost__beast__basic_stream/socket.html" title="basic_stream::socket"><code class="computeroutput"><span class="identifier">basic_stream</span><span class="special">::</span><span class="identifier">socket</span></code></a> member function instead
420 of <code class="computeroutput"><span class="identifier">next_layer</span></code>. This causes
421 the <a class="link" href="../boost__beast__basic_stream.html" title="basic_stream"><code class="computeroutput"><span class="identifier">basic_stream</span></code></a> to be returned in
422 calls to <a class="link" href="../boost__beast__get_lowest_layer.html" title="get_lowest_layer"><code class="computeroutput"><span class="identifier">get_lowest_layer</span></code></a>.
425 <a name="beast.ref.boost__beast__basic_stream__rebind_executor.other.h3"></a>
426 <span class="phrase"><a name="beast.ref.boost__beast__basic_stream__rebind_executor.other.usage"></a></span><a class="link" href="other.html#beast.ref.boost__beast__basic_stream__rebind_executor.other.usage">Usage</a>
429 To use this stream declare an instance of the class. Then, before each
430 logical operation for which a timeout is desired, call <a class="link" href="../boost__beast__basic_stream/expires_after.html" title="basic_stream::expires_after"><code class="computeroutput"><span class="identifier">basic_stream</span><span class="special">::</span><span class="identifier">expires_after</span></code></a> with a duration,
431 or call <a class="link" href="../boost__beast__basic_stream/expires_at.html" title="basic_stream::expires_at"><code class="computeroutput"><span class="identifier">basic_stream</span><span class="special">::</span><span class="identifier">expires_at</span></code></a> with a time point.
432 Alternatively, call <a class="link" href="../boost__beast__basic_stream/expires_never.html" title="basic_stream::expires_never"><code class="computeroutput"><span class="identifier">basic_stream</span><span class="special">::</span><span class="identifier">expires_never</span></code></a> to disable the timeout
433 for subsequent logical operations. A logical operation is any series of
434 one or more direct or indirect calls to the timeout stream's asynchronous
435 read, asynchronous write, or asynchronous connect functions. When a timeout
436 is set and a mixed operation is performed (one that includes both reads
437 and writes, for example) the timeout applies to all of the intermediate
438 asynchronous operations used in the enclosing operation. This allows timeouts
439 to be applied to stream algorithms which were not written specifically
440 to allow for timeouts, when those algorithms are passed a timeout stream
441 with a timeout set. When a timeout occurs the socket will be closed, canceling
442 any pending I/O operations. The completion handlers for these canceled
443 operations will be invoked with the error <a class="link" href="../boost__beast__error.html" title="error"><code class="computeroutput"><span class="identifier">timeout</span></code></a>.
446 <a name="beast.ref.boost__beast__basic_stream__rebind_executor.other.h4"></a>
447 <span class="phrase"><a name="beast.ref.boost__beast__basic_stream__rebind_executor.other.examples"></a></span><a class="link" href="other.html#beast.ref.boost__beast__basic_stream__rebind_executor.other.examples">Examples</a>
450 This function reads an HTTP request with a timeout, then sends the HTTP
451 response with a different timeout.
453 <pre class="programlisting"><span class="keyword">void</span> <span class="identifier">process_http_1</span> <span class="special">(</span><span class="identifier">tcp_stream</span><span class="special">&</span> <span class="identifier">stream</span><span class="special">,</span> <span class="identifier">net</span><span class="special">::</span><span class="identifier">yield_context</span> <span class="identifier">yield</span><span class="special">)</span>
454 <span class="special">{</span>
455 <span class="identifier">flat_buffer</span> <span class="identifier">buffer</span><span class="special">;</span>
456 <span class="identifier">http</span><span class="special">::</span><span class="identifier">request</span><span class="special"><</span><span class="identifier">http</span><span class="special">::</span><span class="identifier">empty_body</span><span class="special">></span> <span class="identifier">req</span><span class="special">;</span>
458 <span class="comment">// Read the request, with a 15 second timeout</span>
459 <span class="identifier">stream</span><span class="special">.</span><span class="identifier">expires_after</span><span class="special">(</span><span class="identifier">std</span><span class="special">::</span><span class="identifier">chrono</span><span class="special">::</span><span class="identifier">seconds</span><span class="special">(</span><span class="number">15</span><span class="special">));</span>
460 <span class="identifier">http</span><span class="special">::</span><span class="identifier">async_read</span><span class="special">(</span><span class="identifier">stream</span><span class="special">,</span> <span class="identifier">buffer</span><span class="special">,</span> <span class="identifier">req</span><span class="special">,</span> <span class="identifier">yield</span><span class="special">);</span>
462 <span class="comment">// Calculate the response</span>
463 <span class="identifier">http</span><span class="special">::</span><span class="identifier">response</span><span class="special"><</span><span class="identifier">http</span><span class="special">::</span><span class="identifier">string_body</span><span class="special">></span> <span class="identifier">res</span> <span class="special">=</span> <span class="identifier">make_response</span><span class="special">(</span><span class="identifier">req</span><span class="special">);</span>
465 <span class="comment">// Send the response, with a 30 second timeout.</span>
466 <span class="identifier">stream</span><span class="special">.</span><span class="identifier">expires_after</span> <span class="special">(</span><span class="identifier">std</span><span class="special">::</span><span class="identifier">chrono</span><span class="special">::</span><span class="identifier">seconds</span><span class="special">(</span><span class="number">30</span><span class="special">));</span>
467 <span class="identifier">http</span><span class="special">::</span><span class="identifier">async_write</span> <span class="special">(</span><span class="identifier">stream</span><span class="special">,</span> <span class="identifier">res</span><span class="special">,</span> <span class="identifier">yield</span><span class="special">);</span>
468 <span class="special">}</span>
471 The example above could be expressed using a single timeout with a simple
472 modification. The function that follows first reads an HTTP request then
473 sends the HTTP response, with a single timeout that applies to the entire
474 combined operation of reading and writing:
476 <pre class="programlisting"><span class="keyword">void</span> <span class="identifier">process_http_2</span> <span class="special">(</span><span class="identifier">tcp_stream</span><span class="special">&</span> <span class="identifier">stream</span><span class="special">,</span> <span class="identifier">net</span><span class="special">::</span><span class="identifier">yield_context</span> <span class="identifier">yield</span><span class="special">)</span>
477 <span class="special">{</span>
478 <span class="identifier">flat_buffer</span> <span class="identifier">buffer</span><span class="special">;</span>
479 <span class="identifier">http</span><span class="special">::</span><span class="identifier">request</span><span class="special"><</span><span class="identifier">http</span><span class="special">::</span><span class="identifier">empty_body</span><span class="special">></span> <span class="identifier">req</span><span class="special">;</span>
481 <span class="comment">// Require that the read and write combined take no longer than 30 seconds</span>
482 <span class="identifier">stream</span><span class="special">.</span><span class="identifier">expires_after</span><span class="special">(</span><span class="identifier">std</span><span class="special">::</span><span class="identifier">chrono</span><span class="special">::</span><span class="identifier">seconds</span><span class="special">(</span><span class="number">30</span><span class="special">));</span>
484 <span class="identifier">http</span><span class="special">::</span><span class="identifier">async_read</span><span class="special">(</span><span class="identifier">stream</span><span class="special">,</span> <span class="identifier">buffer</span><span class="special">,</span> <span class="identifier">req</span><span class="special">,</span> <span class="identifier">yield</span><span class="special">);</span>
486 <span class="identifier">http</span><span class="special">::</span><span class="identifier">response</span><span class="special"><</span><span class="identifier">http</span><span class="special">::</span><span class="identifier">string_body</span><span class="special">></span> <span class="identifier">res</span> <span class="special">=</span> <span class="identifier">make_response</span><span class="special">(</span><span class="identifier">req</span><span class="special">);</span>
487 <span class="identifier">http</span><span class="special">::</span><span class="identifier">async_write</span> <span class="special">(</span><span class="identifier">stream</span><span class="special">,</span> <span class="identifier">res</span><span class="special">,</span> <span class="identifier">yield</span><span class="special">);</span>
488 <span class="special">}</span>
491 Some stream algorithms, such as <code class="computeroutput"><span class="identifier">ssl</span><span class="special">::</span><span class="identifier">stream</span><span class="special">::</span><span class="identifier">async_handshake</span></code>
492 perform both reads and writes. A timeout set before calling the initiating
493 function of such composite stream algorithms will apply to the entire composite
494 operation. For example, a timeout may be set on performing the SSL handshake
497 <pre class="programlisting"><span class="keyword">void</span> <span class="identifier">do_ssl_handshake</span> <span class="special">(</span><span class="identifier">net</span><span class="special">::</span><span class="identifier">ssl</span><span class="special">::</span><span class="identifier">stream</span><span class="special"><</span><span class="identifier">tcp_stream</span><span class="special">>&</span> <span class="identifier">stream</span><span class="special">,</span> <span class="identifier">net</span><span class="special">::</span><span class="identifier">yield_context</span> <span class="identifier">yield</span><span class="special">)</span>
498 <span class="special">{</span>
499 <span class="comment">// Require that the SSL handshake take no longer than 10 seconds</span>
500 <span class="identifier">stream</span><span class="special">.</span><span class="identifier">expires_after</span><span class="special">(</span><span class="identifier">std</span><span class="special">::</span><span class="identifier">chrono</span><span class="special">::</span><span class="identifier">seconds</span><span class="special">(</span><span class="number">10</span><span class="special">));</span>
502 <span class="identifier">stream</span><span class="special">.</span><span class="identifier">async_handshake</span><span class="special">(</span><span class="identifier">net</span><span class="special">::</span><span class="identifier">ssl</span><span class="special">::</span><span class="identifier">stream_base</span><span class="special">::</span><span class="identifier">client</span><span class="special">,</span> <span class="identifier">yield</span><span class="special">);</span>
503 <span class="special">}</span>
506 <a name="beast.ref.boost__beast__basic_stream__rebind_executor.other.h5"></a>
507 <span class="phrase"><a name="beast.ref.boost__beast__basic_stream__rebind_executor.other.blocking_i_o"></a></span><a class="link" href="other.html#beast.ref.boost__beast__basic_stream__rebind_executor.other.blocking_i_o">Blocking
511 Synchronous functions behave identically as that of the wrapped <code class="computeroutput"><span class="identifier">net</span><span class="special">::</span><span class="identifier">basic_stream_socket</span></code>. Timeouts are not
512 available when performing blocking calls.
515 <a name="beast.ref.boost__beast__basic_stream__rebind_executor.other.h6"></a>
516 <span class="phrase"><a name="beast.ref.boost__beast__basic_stream__rebind_executor.other.template_parameters"></a></span><a class="link" href="other.html#beast.ref.boost__beast__basic_stream__rebind_executor.other.template_parameters">Template
519 <div class="informaltable"><table class="table">
540 <code class="computeroutput"><span class="identifier">Protocol</span></code>
545 A type meeting the requirements of <span class="emphasis"><em>Protocol</em></span>
546 representing the protocol the protocol to use for the basic stream
547 socket. A common choice is <code class="computeroutput"><span class="identifier">net</span><span class="special">::</span><span class="identifier">ip</span><span class="special">::</span><span class="identifier">tcp</span></code>.
554 <code class="computeroutput"><span class="identifier">Executor</span></code>
559 A type meeting the requirements of <span class="emphasis"><em>Executor</em></span>
560 to be used for submitting all completion handlers which do not
561 already have an associated executor. If this type is omitted,
562 the default of <code class="computeroutput"><span class="identifier">net</span><span class="special">::</span><span class="identifier">executor</span></code>
570 <a name="beast.ref.boost__beast__basic_stream__rebind_executor.other.h7"></a>
571 <span class="phrase"><a name="beast.ref.boost__beast__basic_stream__rebind_executor.other.thread_safety"></a></span><a class="link" href="other.html#beast.ref.boost__beast__basic_stream__rebind_executor.other.thread_safety">Thread
575 <span class="emphasis"><em>Distinct objects</em></span>: Safe.
578 <span class="emphasis"><em>Shared objects</em></span>: Unsafe. The application must also
579 ensure that all asynchronous operations are performed within the same implicit
583 <a name="beast.ref.boost__beast__basic_stream__rebind_executor.other.h8"></a>
584 <span class="phrase"><a name="beast.ref.boost__beast__basic_stream__rebind_executor.other.see_also"></a></span><a class="link" href="other.html#beast.ref.boost__beast__basic_stream__rebind_executor.other.see_also">See
587 <div class="itemizedlist"><ul class="itemizedlist" style="list-style-type: disc; "><li class="listitem">
588 <a href="http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2018/p1322r0.html" target="_top">[P1322R0]
589 Networking TS enhancement to enable custom I/O executors</a>.
592 <a name="beast.ref.boost__beast__basic_stream__rebind_executor.other.h9"></a>
593 <span class="phrase"><a name="beast.ref.boost__beast__basic_stream__rebind_executor.other.description"></a></span><a class="link" href="other.html#beast.ref.boost__beast__basic_stream__rebind_executor.other.description">Description</a>
596 <table xmlns:rev="http://www.cs.rpi.edu/~gregod/boost/tools/doc/revision" width="100%"><tr>
597 <td align="left"></td>
598 <td align="right"><div class="copyright-footer">Copyright © 2016-2019 Vinnie
600 Distributed under the Boost Software License, Version 1.0. (See accompanying
601 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>)
606 <div class="spirit-nav">
607 <a accesskey="p" href="../boost__beast__basic_stream__rebind_executor.html"><img src="../../../../../../../doc/src/images/prev.png" alt="Prev"></a><a accesskey="u" href="../boost__beast__basic_stream__rebind_executor.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="../boost__beast__basic_stream__timeout_handler.html"><img src="../../../../../../../doc/src/images/next.png" alt="Next"></a>