<?xml version="1.0" encoding="UTF-8"?>
<xliff xmlns="urn:oasis:names:tc:xliff:document:1.1" version="1.1">
  <file original="NoName" source-language="en" datatype="plaintext" target-language="zh_Hans">
    <body>
      <trans-unit xml:space="preserve" approved="no" id="c6de237137656c6a">
        <source>Refresher</source>
        <target state="needs-translation">Refresher</target>
        <context-group name="" purpose="location">
          <context context-type="sourcefile">10</context>
        </context-group>
        <note from="developer">type: section title</note>
      </trans-unit>
      <trans-unit xml:space="preserve" approved="no" id="124cac9692ffc6af">
        <source>To use Beast effectively, a prior understanding of Networking is required. This section reviews these concepts as a reminder and guide for further learning.</source>
        <target state="needs-translation">To use Beast effectively, a prior understanding of Networking is required. This section reviews these concepts as a reminder and guide for further learning.</target>
        <context-group name="" purpose="location">
          <context context-type="sourcefile">12</context>
        </context-group>
        <note from="developer">type: paragraph</note>
      </trans-unit>
      <trans-unit xml:space="preserve" approved="no" id="53265d737bf4abdb">
        <source>A [@https://en.wikipedia.org/wiki/Computer_network ['network]] allows programs located anywhere to exchange information after opting-in to communications by establishing a [@https://en.wikipedia.org/wiki/Data_link ['connection]]. Data may be reliably transferred across a connection in both directions ([@https://en.wikipedia.org/wiki/Duplex_(telecommunications) ['full-duplex]]) with bytes arriving in the same order they were sent. These connections, along with the objects and types used to represent them, are collectively termed [link beast.concepts.streams ['streams]]. The computer or device attached to the network is called a [@https://en.wikipedia.org/wiki/Host_(network) ['host]], and the program on the other end of an established connection is called a [@https://en.wikipedia.org/wiki/Peer-to-peer ['peer]].</source>
        <target state="needs-translation">A [@https://en.wikipedia.org/wiki/Computer_network ['network]] allows programs located anywhere to exchange information after opting-in to communications by establishing a [@https://en.wikipedia.org/wiki/Data_link ['connection]]. Data may be reliably transferred across a connection in both directions ([@https://en.wikipedia.org/wiki/Duplex_(telecommunications) ['full-duplex]]) with bytes arriving in the same order they were sent. These connections, along with the objects and types used to represent them, are collectively termed [link beast.concepts.streams ['streams]]. The computer or device attached to the network is called a [@https://en.wikipedia.org/wiki/Host_(network) ['host]], and the program on the other end of an established connection is called a [@https://en.wikipedia.org/wiki/Peer-to-peer ['peer]].</target>
        <context-group name="" purpose="location">
          <context context-type="sourcefile">16</context>
        </context-group>
        <note from="developer">type: paragraph</note>
      </trans-unit>
      <trans-unit xml:space="preserve" approved="no" id="b12e478c4b027461">
        <source>The [@https://en.wikipedia.org/wiki/Internet ['internet]] is a global network of interconnected computers that use a variety of standardized communication protocols to exchange information. The most popular protocol is [@https://en.wikipedia.org/wiki/Transmission_Control_Protocol ['TCP/IP]], which this library relies on exclusively. The protocol takes care of the low level details so that applications see a ['stream], which is the reliable, full-duplex connection carrying the ordered set of bytes described above. A [@https://en.wikipedia.org/wiki/Server_(computing) ['server]] is a powerful, always-on host at a well-known network name or network address which provides data services. A [@https://en.wikipedia.org/wiki/Client_(computing) ['client]] is a transient peer which connects to a server to exchange data, and goes offline.</source>
        <target state="needs-translation">The [@https://en.wikipedia.org/wiki/Internet ['internet]] is a global network of interconnected computers that use a variety of standardized communication protocols to exchange information. The most popular protocol is [@https://en.wikipedia.org/wiki/Transmission_Control_Protocol ['TCP/IP]], which this library relies on exclusively. The protocol takes care of the low level details so that applications see a ['stream], which is the reliable, full-duplex connection carrying the ordered set of bytes described above. A [@https://en.wikipedia.org/wiki/Server_(computing) ['server]] is a powerful, always-on host at a well-known network name or network address which provides data services. A [@https://en.wikipedia.org/wiki/Client_(computing) ['client]] is a transient peer which connects to a server to exchange data, and goes offline.</target>
        <context-group name="" purpose="location">
          <context context-type="sourcefile">31</context>
        </context-group>
        <note from="developer">type: paragraph</note>
      </trans-unit>
      <trans-unit xml:space="preserve" approved="no" id="9f680ebf2c96cb33">
        <source>A vendor supplies a program called a [@https://en.wikipedia.org/wiki/Device_driver ['device driver]], enabling networking hardware such as an [@https://en.wikipedia.org/wiki/Network_interface_controller ['ethernet adaptor]] to talk to the operating system. This in turn permits running programs to interact with networking using various flavors of interfaces such as [@https://en.wikipedia.org/wiki/Berkeley_sockets ['Berkeley sockets]] or [@https://en.wikipedia.org/wiki/Winsock ['Windows Sockets 2]] ("Winsock").</source>
        <target state="needs-translation">A vendor supplies a program called a [@https://en.wikipedia.org/wiki/Device_driver ['device driver]], enabling networking hardware such as an [@https://en.wikipedia.org/wiki/Network_interface_controller ['ethernet adaptor]] to talk to the operating system. This in turn permits running programs to interact with networking using various flavors of interfaces such as [@https://en.wikipedia.org/wiki/Berkeley_sockets ['Berkeley sockets]] or [@https://en.wikipedia.org/wiki/Winsock ['Windows Sockets 2]] ("Winsock").</target>
        <context-group name="" purpose="location">
          <context context-type="sourcefile">48</context>
        </context-group>
        <note from="developer">type: paragraph</note>
      </trans-unit>
      <trans-unit xml:space="preserve" approved="no" id="e20b5c3197aae2da">
        <source>Networking in C++, represented by __Asio__, [@https://think-async.com/Asio/ Asio], and __NetTS__, provides a layer of abstraction to interact portably with the operating system facilities for not just networking but general [@https://en.wikipedia.org/wiki/Input/output ['input/output]] ("I/O").</source>
        <target state="needs-translation">Networking in C++, represented by __Asio__, [@https://think-async.com/Asio/ Asio], and __NetTS__, provides a layer of abstraction to interact portably with the operating system facilities for not just networking but general [@https://en.wikipedia.org/wiki/Input/output ['input/output]] ("I/O").</target>
        <context-group name="" purpose="location">
          <context context-type="sourcefile">57</context>
        </context-group>
        <note from="developer">type: paragraph</note>
      </trans-unit>
      <trans-unit xml:space="preserve" approved="no" id="c4be9b4b0ebef583">
        <source>Buffers</source>
        <target state="needs-translation">Buffers</target>
        <context-group name="" purpose="location">
          <context context-type="sourcefile">65</context>
        </context-group>
        <note from="developer">type: heading</note>
      </trans-unit>
      <trans-unit xml:space="preserve" approved="no" id="d7a3753d667e3fcf">
        <source>A [@https://en.wikipedia.org/wiki/Data_buffer ['buffer]] holds a contiguous sequence of bytes used when performing I/O. The types [@boost:/doc/html/boost_asio/reference/const_buffer.html `net::const_buffer`] and [@boost:/doc/html/boost_asio/reference/mutable_buffer.html `net::mutable_buffer`] represent these memory regions as type-safe pointer/size pairs:</source>
        <target state="needs-translation">A [@https://en.wikipedia.org/wiki/Data_buffer ['buffer]] holds a contiguous sequence of bytes used when performing I/O. The types [@boost:/doc/html/boost_asio/reference/const_buffer.html `net::const_buffer`] and [@boost:/doc/html/boost_asio/reference/mutable_buffer.html `net::mutable_buffer`] represent these memory regions as type-safe pointer/size pairs:</target>
        <context-group name="" purpose="location">
          <context context-type="sourcefile">67</context>
        </context-group>
        <note from="developer">type: paragraph</note>
      </trans-unit>
      <trans-unit xml:space="preserve" approved="no" id="deed21d01df079bb">
        <source>`const_buffer` and `mutable_buffer` are preferred over `std::span&lt;byte&gt;`</source>
        <target state="needs-translation">`const_buffer` and `mutable_buffer` are preferred over `std::span&lt;byte&gt;`</target>
        <context-group name="" purpose="location">
          <context context-type="sourcefile">79</context>
        </context-group>
        <note from="developer">type: paragraph</note>
      </trans-unit>
      <trans-unit xml:space="preserve" approved="no" id="14b66ed9614fa356">
        <source>The concepts __ConstBufferSequence__ and __MutableBufferSequence__ describe bidirectional ranges whose value type is convertible to `const_buffer` and `mutable_buffer` respectively. These sequences allow transacting with multiple buffers in a single function call, a technique called [@https://en.wikipedia.org/wiki/Vectored_I/O ['scatter/gather I/O]]. Buffers and buffer sequences are non-owning; copies produce shallow references and not duplicates of the underlying memory. Each of these statements declares a buffer sequence:</source>
        <target state="needs-translation">The concepts __ConstBufferSequence__ and __MutableBufferSequence__ describe bidirectional ranges whose value type is convertible to `const_buffer` and `mutable_buffer` respectively. These sequences allow transacting with multiple buffers in a single function call, a technique called [@https://en.wikipedia.org/wiki/Vectored_I/O ['scatter/gather I/O]]. Buffers and buffer sequences are non-owning; copies produce shallow references and not duplicates of the underlying memory. Each of these statements declares a buffer sequence:</target>
        <context-group name="" purpose="location">
          <context context-type="sourcefile">92</context>
        </context-group>
        <note from="developer">type: paragraph</note>
      </trans-unit>
      <trans-unit xml:space="preserve" approved="no" id="577e1fdbd11e281d">
        <source>The functions [@boost:/doc/html/boost_asio/reference/buffer_size.html `net::buffer_size`] and [@boost:/doc/html/boost_asio/reference/buffer_copy.html `net::buffer_copy`] determine the total number of bytes in a buffer sequence, and transfer some or all of bytes from one buffer sequence to another respectively. The function `buffer_size` is a customization point: user defined overloads in foreign namespaces are possible, and callers should invoke `buffer_size` without namespace qualification. The functions [@boost:/doc/html/boost_asio/reference/buffer_sequence_begin.html `net::buffer_sequence_begin`] and [@boost:/doc/html/boost_asio/reference/buffer_sequence_end.html `net::buffer_sequence_end`] are used to obtain a pair of iterators for traversing the sequence. Beast provides a set of buffer sequence types and algorithms such as [link beast.ref.boost__beast__buffers_cat `buffers_cat`], [link beast.ref.boost__beast__buffers_front `buffers_front`], [link beast.ref.boost__beast__buffers_prefix `buffers_prefix`], [link beast.ref.boost__beast__buffers_range `buffers_range`], and [link beast.ref.boost__beast__buffers_suffix `buffers_suffix`]. This example returns the bytes in a buffer sequence as a string:</source>
        <target state="needs-translation">The functions [@boost:/doc/html/boost_asio/reference/buffer_size.html `net::buffer_size`] and [@boost:/doc/html/boost_asio/reference/buffer_copy.html `net::buffer_copy`] determine the total number of bytes in a buffer sequence, and transfer some or all of bytes from one buffer sequence to another respectively. The function `buffer_size` is a customization point: user defined overloads in foreign namespaces are possible, and callers should invoke `buffer_size` without namespace qualification. The functions [@boost:/doc/html/boost_asio/reference/buffer_sequence_begin.html `net::buffer_sequence_begin`] and [@boost:/doc/html/boost_asio/reference/buffer_sequence_end.html `net::buffer_sequence_end`] are used to obtain a pair of iterators for traversing the sequence. Beast provides a set of buffer sequence types and algorithms such as [link beast.ref.boost__beast__buffers_cat `buffers_cat`], [link beast.ref.boost__beast__buffers_front `buffers_front`], [link beast.ref.boost__beast__buffers_prefix `buffers_prefix`], [link beast.ref.boost__beast__buffers_range `buffers_range`], and [link beast.ref.boost__beast__buffers_suffix `buffers_suffix`]. This example returns the bytes in a buffer sequence as a string:</target>
        <context-group name="" purpose="location">
          <context context-type="sourcefile">104</context>
        </context-group>
        <note from="developer">type: paragraph</note>
      </trans-unit>
      <trans-unit xml:space="preserve" approved="no" id="c378543953bf85ab">
        <source>The __DynamicBuffer__ concept defines a resizable buffer sequence interface. Algorithms may be expressed in terms of dynamic buffers when the memory requirements are not known ahead of time, for example when reading an HTTP message from a stream. Beast provides a well-rounded collection of dynamic buffer types such as [link beast.ref.boost__beast__buffers_adaptor `buffers_adaptor`], [link beast.ref.boost__beast__flat_buffer `flat_buffer`], [link beast.ref.boost__beast__multi_buffer `multi_buffer`], and [link beast.ref.boost__beast__static_buffer `static_buffer`]. The following function reads data from a [link beast.ref.boost__beast__tcp_stream `tcp_stream`] into a dynamic buffer until it encountering a newline character, using [@boost:/doc/html/boost_asio/reference/buffers_iterator.html `net::buffers_iterator`] to treat the contents of the buffer as a range of characters:</source>
        <target state="needs-translation">The __DynamicBuffer__ concept defines a resizable buffer sequence interface. Algorithms may be expressed in terms of dynamic buffers when the memory requirements are not known ahead of time, for example when reading an HTTP message from a stream. Beast provides a well-rounded collection of dynamic buffer types such as [link beast.ref.boost__beast__buffers_adaptor `buffers_adaptor`], [link beast.ref.boost__beast__flat_buffer `flat_buffer`], [link beast.ref.boost__beast__multi_buffer `multi_buffer`], and [link beast.ref.boost__beast__static_buffer `static_buffer`]. The following function reads data from a [link beast.ref.boost__beast__tcp_stream `tcp_stream`] into a dynamic buffer until it encountering a newline character, using [@boost:/doc/html/boost_asio/reference/buffers_iterator.html `net::buffers_iterator`] to treat the contents of the buffer as a range of characters:</target>
        <context-group name="" purpose="location">
          <context context-type="sourcefile">125</context>
        </context-group>
        <note from="developer">type: paragraph</note>
      </trans-unit>
      <trans-unit xml:space="preserve" approved="no" id="ec7a19b3e1867631">
        <source>Synchronous I/O</source>
        <target state="needs-translation">Synchronous I/O</target>
        <context-group name="" purpose="location">
          <context context-type="sourcefile">146</context>
        </context-group>
        <note from="developer">type: heading</note>
      </trans-unit>
      <trans-unit xml:space="preserve" approved="no" id="ca110ca612914266">
        <source>Synchronous input and output is accomplished through blocking function calls that return with the result of the operation. Such operations typically cannot be canceled and do not have a method for setting a timeout. The __SyncReadStream__ and __SyncWriteStream__ concepts define requirements for ['synchronous streams]: a portable I/O abstraction that transfers data using buffer sequences to represent bytes and either `error_code` or an exception to report any failures. [@boost:/doc/html/boost_asio/reference/basic_stream_socket.html ['net::basic_stream_socket]] is a synchronous stream commonly used to form TCP/IP connections. User-defined types which meet the requirements are possible:</source>
        <target state="needs-translation">Synchronous input and output is accomplished through blocking function calls that return with the result of the operation. Such operations typically cannot be canceled and do not have a method for setting a timeout. The __SyncReadStream__ and __SyncWriteStream__ concepts define requirements for ['synchronous streams]: a portable I/O abstraction that transfers data using buffer sequences to represent bytes and either `error_code` or an exception to report any failures. [@boost:/doc/html/boost_asio/reference/basic_stream_socket.html ['net::basic_stream_socket]] is a synchronous stream commonly used to form TCP/IP connections. User-defined types which meet the requirements are possible:</target>
        <context-group name="" purpose="location">
          <context context-type="sourcefile">148</context>
        </context-group>
        <note from="developer">type: paragraph</note>
      </trans-unit>
      <trans-unit xml:space="preserve" approved="no" id="1814703d404f2fca">
        <source>A ['synchronous stream algorithm] is written as a function template accepting a stream object meeting the named requirements for synchronous reading, writing, or both. This example shows an algorithm which writes text and uses exceptions to indicate errors:</source>
        <target state="needs-translation">A ['synchronous stream algorithm] is written as a function template accepting a stream object meeting the named requirements for synchronous reading, writing, or both. This example shows an algorithm which writes text and uses exceptions to indicate errors:</target>
        <context-group name="" purpose="location">
          <context context-type="sourcefile">162</context>
        </context-group>
        <note from="developer">type: paragraph</note>
      </trans-unit>
      <trans-unit xml:space="preserve" approved="no" id="8a34df2121e55382">
        <source>The same algorithm may be expressed using error codes instead of exceptions:</source>
        <target state="needs-translation">The same algorithm may be expressed using error codes instead of exceptions:</target>
        <context-group name="" purpose="location">
          <context context-type="sourcefile">170</context>
        </context-group>
        <note from="developer">type: paragraph</note>
      </trans-unit>
      <trans-unit xml:space="preserve" approved="no" id="d9746ceef4ebe852">
        <source>Asynchronous I/O</source>
        <target state="needs-translation">Asynchronous I/O</target>
        <context-group name="" purpose="location">
          <context context-type="sourcefile">176</context>
        </context-group>
        <note from="developer">type: heading</note>
      </trans-unit>
      <trans-unit xml:space="preserve" approved="no" id="aa08d3f70754f977">
        <source>An asynchronous operation begins with a call to an [@boost:/doc/html/boost_asio/reference/asynchronous_operations.html ['initiating function]], which starts the operation and returns to the caller immediately. This ['outstanding] asynchronous operation proceeds concurrently without blocking the caller. When the externally observable side effects are fully established, a movable function object known as a [@boost:/doc/html/boost_asio/reference/CompletionHandler.html ['completion handler]] provided in the initiating function call is queued for execution with the results, which may include the error code and other specific information. An asynchronous operation is said to be ['completed] after the completion handler is queued. The code that follows shows how some text may be written to a socket asynchronously, invoking a lambda when the operation is complete:</source>
        <target state="needs-translation">An asynchronous operation begins with a call to an [@boost:/doc/html/boost_asio/reference/asynchronous_operations.html ['initiating function]], which starts the operation and returns to the caller immediately. This ['outstanding] asynchronous operation proceeds concurrently without blocking the caller. When the externally observable side effects are fully established, a movable function object known as a [@boost:/doc/html/boost_asio/reference/CompletionHandler.html ['completion handler]] provided in the initiating function call is queued for execution with the results, which may include the error code and other specific information. An asynchronous operation is said to be ['completed] after the completion handler is queued. The code that follows shows how some text may be written to a socket asynchronously, invoking a lambda when the operation is complete:</target>
        <context-group name="" purpose="location">
          <context context-type="sourcefile">178</context>
        </context-group>
        <note from="developer">type: paragraph</note>
      </trans-unit>
      <trans-unit xml:space="preserve" approved="no" id="31ffb15d3fa9a72e">
        <source>Every completion handler (also referred to as a [@https://en.wikipedia.org/wiki/Continuation ['continuation]]) has both an [@boost:/doc/html/boost_asio/overview/core/allocation.html ['associated allocator]] returned by [@boost:/doc/html/boost_asio/reference/get_associated_allocator.html `net::get_associated_allocator`], , an [@boost:/doc/html/boost_asio/reference/associated_cancellation_slot.html ['associated cancellation slot]] returned by [@boost:/doc/html/boost_asio/reference/associated_cancellation_slot.html `net::get_associated_cancellation_slot`]. and an [@boost:/doc/html/boost_asio/reference/associated_executor.html ['associated executor]] returned by [@boost:/doc/html/boost_asio/reference/get_associated_executor.html `net::get_associated_executor`]. These associations may be specified intrusively:</source>
        <target state="needs-translation">Every completion handler (also referred to as a [@https://en.wikipedia.org/wiki/Continuation ['continuation]]) has both an [@boost:/doc/html/boost_asio/overview/core/allocation.html ['associated allocator]] returned by [@boost:/doc/html/boost_asio/reference/get_associated_allocator.html `net::get_associated_allocator`], , an [@boost:/doc/html/boost_asio/reference/associated_cancellation_slot.html ['associated cancellation slot]] returned by [@boost:/doc/html/boost_asio/reference/associated_cancellation_slot.html `net::get_associated_cancellation_slot`]. and an [@boost:/doc/html/boost_asio/reference/associated_executor.html ['associated executor]] returned by [@boost:/doc/html/boost_asio/reference/get_associated_executor.html `net::get_associated_executor`]. These associations may be specified intrusively:</target>
        <context-group name="" purpose="location">
          <context context-type="sourcefile">196</context>
        </context-group>
        <note from="developer">type: paragraph</note>
      </trans-unit>
      <trans-unit xml:space="preserve" approved="no" id="be61a6974f691bed">
        <source>Or these associations may be specified non-intrusively, by specializing the class templates [@boost:/doc/html/boost_asio/reference/associated_allocator.html `net::associated_allocator`] , [@boost:/doc/html/boost_asio/reference/associated_cancellation_slot.html `net::associated_cancellation_slot`] and [@boost:/doc/html/boost_asio/reference/associated_executor.html `net::associated_executor`]:</source>
        <target state="needs-translation">Or these associations may be specified non-intrusively, by specializing the class templates [@boost:/doc/html/boost_asio/reference/associated_allocator.html `net::associated_allocator`] , [@boost:/doc/html/boost_asio/reference/associated_cancellation_slot.html `net::associated_cancellation_slot`] and [@boost:/doc/html/boost_asio/reference/associated_executor.html `net::associated_executor`]:</target>
        <context-group name="" purpose="location">
          <context context-type="sourcefile">214</context>
        </context-group>
        <note from="developer">type: paragraph</note>
      </trans-unit>
      <trans-unit xml:space="preserve" approved="no" id="0d698aad643efa8a">
        <source>The function [@boost:/doc/html/boost_asio/reference/bind_executor.html `net::bind_executor`] may be used when the caller wants to change the executor of a completion handler.</source>
        <target state="needs-translation">The function [@boost:/doc/html/boost_asio/reference/bind_executor.html `net::bind_executor`] may be used when the caller wants to change the executor of a completion handler.</target>
        <context-group name="" purpose="location">
          <context context-type="sourcefile">224</context>
        </context-group>
        <note from="developer">type: paragraph</note>
      </trans-unit>
      <trans-unit xml:space="preserve" approved="no" id="c453836cb16ffc79">
        <source>The allocator is used by the implementation to obtain any temporary storage necessary to perform the operation. Temporary allocations are always freed before the completion handler is invoked. The executor is a cheaply copyable object providing the algorithm used to invoke the completion handler. Unless customized by the caller, a completion handler defaults to using `std::allocator&lt;void&gt;` and the executor of the corresponding I/O object.</source>
        <target state="needs-translation">The allocator is used by the implementation to obtain any temporary storage necessary to perform the operation. Temporary allocations are always freed before the completion handler is invoked. The executor is a cheaply copyable object providing the algorithm used to invoke the completion handler. Unless customized by the caller, a completion handler defaults to using `std::allocator&lt;void&gt;` and the executor of the corresponding I/O object.</target>
        <context-group name="" purpose="location">
          <context context-type="sourcefile">229</context>
        </context-group>
        <note from="developer">type: paragraph</note>
      </trans-unit>
      <trans-unit xml:space="preserve" approved="no" id="efc1d961c4601cee">
        <source>The function [@boost:/doc/html/boost_asio/reference/bind_allocator.html `net::bind_allocator`] can be used when the caller wants to assign a custom allocator to the operation.</source>
        <target state="needs-translation">The function [@boost:/doc/html/boost_asio/reference/bind_allocator.html `net::bind_allocator`] can be used when the caller wants to assign a custom allocator to the operation.</target>
        <context-group name="" purpose="location">
          <context context-type="sourcefile">236</context>
        </context-group>
        <note from="developer">type: paragraph</note>
      </trans-unit>
      <trans-unit xml:space="preserve" approved="no" id="279f6846a2aa1479">
        <source>A completion token's associated cancellation_slot can be used to cancel single operations. This is often passed through by the completion token such as [@boost:/doc/html/boost_asio/reference/use_awaitable.html `net::use_awaitable`] or [@boost:/doc/html/boost_asio/reference/yield_context.html `net::yield_context`] .</source>
        <target state="needs-translation">A completion token's associated cancellation_slot can be used to cancel single operations. This is often passed through by the completion token such as [@boost:/doc/html/boost_asio/reference/use_awaitable.html `net::use_awaitable`] or [@boost:/doc/html/boost_asio/reference/yield_context.html `net::yield_context`] .</target>
        <context-group name="" purpose="location">
          <context context-type="sourcefile">241</context>
        </context-group>
        <note from="developer">type: paragraph</note>
      </trans-unit>
      <trans-unit xml:space="preserve" approved="no" id="fe136b2e1bad1580">
        <source>The available [@boost:/doc/html/boost_asio/reference/cancellation_type.html cancellation types] are listed below.</source>
        <target state="needs-translation">The available [@boost:/doc/html/boost_asio/reference/cancellation_type.html cancellation types] are listed below.</target>
        <context-group name="" purpose="location">
          <context context-type="sourcefile">248</context>
        </context-group>
        <note from="developer">type: paragraph</note>
      </trans-unit>
      <trans-unit xml:space="preserve" approved="no" id="aae83dc6db0c1f27">
        <source># `terminal`</source>
        <target state="needs-translation"># `terminal`</target>
        <context-group name="" purpose="location">
          <context context-type="sourcefile">250</context>
        </context-group>
        <note from="developer">type: list</note>
      </trans-unit>
      <trans-unit xml:space="preserve" approved="no" id="77d473c1209ca1a2">
        <source># `partial`</source>
        <target state="needs-translation"># `partial`</target>
        <context-group name="" purpose="location">
          <context context-type="sourcefile">254</context>
        </context-group>
        <note from="developer">type: list</note>
      </trans-unit>
      <trans-unit xml:space="preserve" approved="no" id="0ec254832ce0a2f6">
        <source># `total`</source>
        <target state="needs-translation"># `total`</target>
        <context-group name="" purpose="location">
          <context context-type="sourcefile">259</context>
        </context-group>
        <note from="developer">type: list</note>
      </trans-unit>
      <trans-unit xml:space="preserve" approved="no" id="7d3cef70ffda4c86">
        <source>Networking prescribes facilities to determine the context in which handlers run. Every I/O object refers to an __ExecutionContext__ for obtaining the __Executor__ instance used to invoke completion handlers. An executor determines where and how completion handlers are invoked. Executors obtained from an instance of __io_context__ offer a basic guarantee: handlers will only be invoked from threads which are currently calling [@boost:/doc/html/boost_asio/reference/io_context/run/overload1.html `net::io_context::run`].</source>
        <target state="needs-translation">Networking prescribes facilities to determine the context in which handlers run. Every I/O object refers to an __ExecutionContext__ for obtaining the __Executor__ instance used to invoke completion handlers. An executor determines where and how completion handlers are invoked. Executors obtained from an instance of __io_context__ offer a basic guarantee: handlers will only be invoked from threads which are currently calling [@boost:/doc/html/boost_asio/reference/io_context/run/overload1.html `net::io_context::run`].</target>
        <context-group name="" purpose="location">
          <context context-type="sourcefile">266</context>
        </context-group>
        <note from="developer">type: paragraph</note>
      </trans-unit>
      <trans-unit xml:space="preserve" approved="no" id="69fae14655ec4996">
        <source>The __AsyncReadStream__ and __AsyncWriteStream__ concepts define requirements for ['asynchronous streams]: a portable I/O abstraction that exchanges data asynchronously using buffer sequences to represent bytes and `error_code` to report any failures. An ['asynchronous stream algorithm] is written as a templated initiating function template accepting a stream object meeting the named requirements for asynchronous reading, writing, or both. This example shows an algorithm which writes some text to an asynchronous stream:</source>
        <target state="needs-translation">The __AsyncReadStream__ and __AsyncWriteStream__ concepts define requirements for ['asynchronous streams]: a portable I/O abstraction that exchanges data asynchronously using buffer sequences to represent bytes and `error_code` to report any failures. An ['asynchronous stream algorithm] is written as a templated initiating function template accepting a stream object meeting the named requirements for asynchronous reading, writing, or both. This example shows an algorithm which writes some text to an asynchronous stream:</target>
        <context-group name="" purpose="location">
          <context context-type="sourcefile">274</context>
        </context-group>
        <note from="developer">type: paragraph</note>
      </trans-unit>
      <trans-unit xml:space="preserve" approved="no" id="0df498a966d7a624">
        <source>Concurrency</source>
        <target state="needs-translation">Concurrency</target>
        <context-group name="" purpose="location">
          <context context-type="sourcefile">288</context>
        </context-group>
        <note from="developer">type: heading</note>
      </trans-unit>
      <trans-unit xml:space="preserve" approved="no" id="d822fdba15eea26f">
        <source>I/O objects such as sockets and streams [*are not thread-safe]. Although it is possible to have more than one operation outstanding (for example, a simultaneous asynchronous read and asynchronous write) the stream object itself may only be accessed from one thread at a time. This means that member functions such as move constructors, destructors, or initiating functions must not be called concurrently. Usually this is accomplished with synchronization primitives such as a [@https://en.cppreference.com/w/cpp/thread/mutex `mutex`], but concurrent network programs need a better way to access shared resources, since acquiring ownership of a mutex could block threads from performing uncontended work. For efficiency, networking adopts a model of using threads without explicit locking by requiring all access to I/O objects to be performed within a [@boost:/doc/html/boost_asio/overview/core/strands.html ['strand]].</source>
        <target state="needs-translation">I/O objects such as sockets and streams [*are not thread-safe]. Although it is possible to have more than one operation outstanding (for example, a simultaneous asynchronous read and asynchronous write) the stream object itself may only be accessed from one thread at a time. This means that member functions such as move constructors, destructors, or initiating functions must not be called concurrently. Usually this is accomplished with synchronization primitives such as a [@https://en.cppreference.com/w/cpp/thread/mutex `mutex`], but concurrent network programs need a better way to access shared resources, since acquiring ownership of a mutex could block threads from performing uncontended work. For efficiency, networking adopts a model of using threads without explicit locking by requiring all access to I/O objects to be performed within a [@boost:/doc/html/boost_asio/overview/core/strands.html ['strand]].</target>
        <context-group name="" purpose="location">
          <context context-type="sourcefile">290</context>
        </context-group>
        <note from="developer">type: paragraph</note>
      </trans-unit>
      <trans-unit xml:space="preserve" approved="no" id="eeaa074c5c638454">
        <source>Universal Model</source>
        <target state="needs-translation">Universal Model</target>
        <context-group name="" purpose="location">
          <context context-type="sourcefile">307</context>
        </context-group>
        <note from="developer">type: heading</note>
      </trans-unit>
      <trans-unit xml:space="preserve" approved="no" id="00143d74c5293e5e">
        <source>Because completion handlers cause an inversion of the flow of control, sometimes other methods of attaching a continuation are desired. Networking provides the [@http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2013/n3747.pdf ['Universal Model for Asynchronous Operations]], providing a customizable means for transforming the signature of the initiating function to use other types of objects and methods in place of a completion handler callback. For example to call to write a string to a socket asynchronously, using a `std::future` to receive the number of bytes transferred thus looks like this:</source>
        <target state="needs-translation">Because completion handlers cause an inversion of the flow of control, sometimes other methods of attaching a continuation are desired. Networking provides the [@http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2013/n3747.pdf ['Universal Model for Asynchronous Operations]], providing a customizable means for transforming the signature of the initiating function to use other types of objects and methods in place of a completion handler callback. For example to call to write a string to a socket asynchronously, using a `std::future` to receive the number of bytes transferred thus looks like this:</target>
        <context-group name="" purpose="location">
          <context context-type="sourcefile">309</context>
        </context-group>
        <note from="developer">type: paragraph</note>
      </trans-unit>
      <trans-unit xml:space="preserve" approved="no" id="d40d21bad5408e65">
        <source>This functionality is enabled by passing the variable [@boost:/doc/html/boost_asio/reference/use_future.html `net::use_future`] (of type [@boost:/doc/html/boost_asio/reference/use_future_t.html `net::use_future_t&lt;&gt;`]) in place of the completion handler. The same `async_write` function overload can work with a [@https://en.wikipedia.org/wiki/Fiber_(computer_science) ['fiber]] launched with [@boost:/doc/html/boost_asio/reference/spawn/overload1.html `asio::spawn`]:</source>
        <target state="needs-translation">This functionality is enabled by passing the variable [@boost:/doc/html/boost_asio/reference/use_future.html `net::use_future`] (of type [@boost:/doc/html/boost_asio/reference/use_future_t.html `net::use_future_t&lt;&gt;`]) in place of the completion handler. The same `async_write` function overload can work with a [@https://en.wikipedia.org/wiki/Fiber_(computer_science) ['fiber]] launched with [@boost:/doc/html/boost_asio/reference/spawn/overload1.html `asio::spawn`]:</target>
        <context-group name="" purpose="location">
          <context context-type="sourcefile">321</context>
        </context-group>
        <note from="developer">type: paragraph</note>
      </trans-unit>
      <trans-unit xml:space="preserve" approved="no" id="55843c274045cf5a">
        <source>In both of these cases, an object with a specific type is used in place of the completion handler, and the return value of the initiating function is transformed from `void` to `std::future&lt;std::size_t&gt;` or `std::size_t`. The handler is sometimes called a __CompletionToken__ when used in this context. The return type transformation is supported by customization points in the initiating function signature. Here is the signature for [@boost:/doc/html/boost_asio/reference/async_write/overload1.html `net::async_write`]:</source>
        <target state="needs-translation">In both of these cases, an object with a specific type is used in place of the completion handler, and the return value of the initiating function is transformed from `void` to `std::future&lt;std::size_t&gt;` or `std::size_t`. The handler is sometimes called a __CompletionToken__ when used in this context. The return type transformation is supported by customization points in the initiating function signature. Here is the signature for [@boost:/doc/html/boost_asio/reference/async_write/overload1.html `net::async_write`]:</target>
        <context-group name="" purpose="location">
          <context context-type="sourcefile">333</context>
        </context-group>
        <note from="developer">type: paragraph</note>
      </trans-unit>
      <trans-unit xml:space="preserve" approved="no" id="279cd4558e8d46d6">
        <source>Note that a `spawn` function itself has a completion signature, but we're ignoring it's result in the example by using `asio::detached`.</source>
        <target state="needs-translation">Note that a `spawn` function itself has a completion signature, but we're ignoring it's result in the example by using `asio::detached`.</target>
        <context-group name="" purpose="location">
          <context context-type="sourcefile">343</context>
        </context-group>
        <note from="developer">type: paragraph</note>
      </trans-unit>
      <trans-unit xml:space="preserve" approved="no" id="9baf2ee16a02cb1a">
        <source>The type of the function's return value is determined by the [@boost:/doc/html/boost_asio/reference/async_result.html `net::async_result`] customization point, which comes with specializations for common library types such as `std::future` and may also be specialized for user-defined types. The body of the initiating function calls the [@boost:/doc/html/boost_asio/reference/async_initiate.html `net::async_initiate`] helper to capture the arguments and forward them to the specialization of `async_result`. An additional "initiation function" object is provided which `async_result` may use to immediately launch the operation, or defer the launch of the operation until some point in the future (this is called "lazy execution"). The initiation function object receives the internal completion handler which matches the signature expected by the initiating function:</source>
        <target state="needs-translation">The type of the function's return value is determined by the [@boost:/doc/html/boost_asio/reference/async_result.html `net::async_result`] customization point, which comes with specializations for common library types such as `std::future` and may also be specialized for user-defined types. The body of the initiating function calls the [@boost:/doc/html/boost_asio/reference/async_initiate.html `net::async_initiate`] helper to capture the arguments and forward them to the specialization of `async_result`. An additional "initiation function" object is provided which `async_result` may use to immediately launch the operation, or defer the launch of the operation until some point in the future (this is called "lazy execution"). The initiation function object receives the internal completion handler which matches the signature expected by the initiating function:</target>
        <context-group name="" purpose="location">
          <context context-type="sourcefile">348</context>
        </context-group>
        <note from="developer">type: paragraph</note>
      </trans-unit>
      <trans-unit xml:space="preserve" approved="no" id="2a6325cdf1f6b1bd">
        <source>This transformed, internal handler is responsible for the finalizing step that delivers the result of the operation to the caller. For example, when using `net::use_future` the internal handler will deliver the result by calling [@https://en.cppreference.com/w/cpp/thread/promise/set_value `std::promise::set_value`] on the promise object returned by the initiating function.</source>
        <target state="needs-translation">This transformed, internal handler is responsible for the finalizing step that delivers the result of the operation to the caller. For example, when using `net::use_future` the internal handler will deliver the result by calling [@https://en.cppreference.com/w/cpp/thread/promise/set_value `std::promise::set_value`] on the promise object returned by the initiating function.</target>
        <context-group name="" purpose="location">
          <context context-type="sourcefile">363</context>
        </context-group>
        <note from="developer">type: paragraph</note>
      </trans-unit>
      <trans-unit xml:space="preserve" approved="no" id="ccb8698bfa935ee3">
        <source>Using Networking</source>
        <target state="needs-translation">Using Networking</target>
        <context-group name="" purpose="location">
          <context context-type="sourcefile">371</context>
        </context-group>
        <note from="developer">type: heading</note>
      </trans-unit>
      <trans-unit xml:space="preserve" approved="no" id="87789ebb600e13cb">
        <source>Most library stream algorithms require a __socket__, __ssl_stream__, or other __Stream__ object that has already established communication with a remote peer. This example is provided as a reminder of how to work with sockets:</source>
        <target state="needs-translation">Most library stream algorithms require a __socket__, __ssl_stream__, or other __Stream__ object that has already established communication with a remote peer. This example is provided as a reminder of how to work with sockets:</target>
        <context-group name="" purpose="location">
          <context context-type="sourcefile">373</context>
        </context-group>
        <note from="developer">type: paragraph</note>
      </trans-unit>
      <trans-unit xml:space="preserve" approved="no" id="e037c610621878bf">
        <source>Throughout this documentation identifiers with the following names have special meaning:</source>
        <target state="needs-translation">Throughout this documentation identifiers with the following names have special meaning:</target>
        <context-group name="" purpose="location">
          <context context-type="sourcefile">380</context>
        </context-group>
        <note from="developer">type: paragraph</note>
      </trans-unit>
      <trans-unit xml:space="preserve" approved="no" id="ccff7a52763fff51">
        <source>Global Variables</source>
        <target state="needs-translation">Global Variables</target>
        <context-group name="" purpose="location">
          <context context-type="sourcefile">383</context>
        </context-group>
        <note from="developer">type: table title</note>
      </trans-unit>
      <trans-unit xml:space="preserve" approved="no" id="b4c4db868dbf643a">
        <source>Name</source>
        <target state="needs-translation">Name</target>
        <context-group name="" purpose="location">
          <context context-type="sourcefile">383</context>
        </context-group>
        <note from="developer">type: table cell</note>
      </trans-unit>
      <trans-unit xml:space="preserve" approved="no" id="f7f5c115cf553484">
        <source>Description</source>
        <target state="needs-translation">Description</target>
        <context-group name="" purpose="location">
          <context context-type="sourcefile">383</context>
        </context-group>
        <note from="developer">type: table cell</note>
      </trans-unit>
      <trans-unit xml:space="preserve" approved="no" id="97f6b82b17c055aa">
        <source>[@boost:/doc/html/boost_asio/reference/io_context.html [*`ioc`]]</source>
        <target state="needs-translation">[@boost:/doc/html/boost_asio/reference/io_context.html [*`ioc`]]</target>
        <context-group name="" purpose="location">
          <context context-type="sourcefile">383</context>
        </context-group>
        <note from="developer">type: table cell</note>
      </trans-unit>
      <trans-unit xml:space="preserve" approved="no" id="04cdb3f2c4508185">
        <source>A variable of type __io_context__ which is running on one separate thread, and upon which an __executor_work_guard__ object has been constructed.</source>
        <target state="needs-translation">A variable of type __io_context__ which is running on one separate thread, and upon which an __executor_work_guard__ object has been constructed.</target>
        <context-group name="" purpose="location">
          <context context-type="sourcefile">383</context>
        </context-group>
        <note from="developer">type: table cell</note>
      </trans-unit>
      <trans-unit xml:space="preserve" approved="no" id="00b978c21234871c">
        <source>[@boost:/doc/html/boost_asio/reference/ip__tcp/socket.html [*`sock`]]</source>
        <target state="needs-translation">[@boost:/doc/html/boost_asio/reference/ip__tcp/socket.html [*`sock`]]</target>
        <context-group name="" purpose="location">
          <context context-type="sourcefile">383</context>
        </context-group>
        <note from="developer">type: table cell</note>
      </trans-unit>
      <trans-unit xml:space="preserve" approved="no" id="427619f31a8cca1e">
        <source>A variable of type [@boost:/doc/html/boost_asio/reference/ip__tcp/socket.html `tcp::socket`] which has already been connected to a remote host.</source>
        <target state="needs-translation">A variable of type [@boost:/doc/html/boost_asio/reference/ip__tcp/socket.html `tcp::socket`] which has already been connected to a remote host.</target>
        <context-group name="" purpose="location">
          <context context-type="sourcefile">383</context>
        </context-group>
        <note from="developer">type: table cell</note>
      </trans-unit>
      <trans-unit xml:space="preserve" approved="no" id="cf375d624f60cfdb">
        <source>[@boost:/doc/html/boost_asio/reference/ssl__stream.html [*`ssl_sock`]]</source>
        <target state="needs-translation">[@boost:/doc/html/boost_asio/reference/ssl__stream.html [*`ssl_sock`]]</target>
        <context-group name="" purpose="location">
          <context context-type="sourcefile">383</context>
        </context-group>
        <note from="developer">type: table cell</note>
      </trans-unit>
      <trans-unit xml:space="preserve" approved="no" id="b17e0f92ff64c285">
        <source>A variable of type [@boost:/doc/html/boost_asio/reference/ssl__stream.html `net::ssl::stream&lt;tcp::socket&gt;`] which is already connected and has handshaked with a remote host.</source>
        <target state="needs-translation">A variable of type [@boost:/doc/html/boost_asio/reference/ssl__stream.html `net::ssl::stream&lt;tcp::socket&gt;`] which is already connected and has handshaked with a remote host.</target>
        <context-group name="" purpose="location">
          <context context-type="sourcefile">383</context>
        </context-group>
        <note from="developer">type: table cell</note>
      </trans-unit>
      <trans-unit xml:space="preserve" approved="no" id="0fdf07fca73dfefb">
        <source>[link beast.ref.boost__beast__websocket__stream [*`ws`]]</source>
        <target state="needs-translation">[link beast.ref.boost__beast__websocket__stream [*`ws`]]</target>
        <context-group name="" purpose="location">
          <context context-type="sourcefile">383</context>
        </context-group>
        <note from="developer">type: table cell</note>
      </trans-unit>
      <trans-unit xml:space="preserve" approved="no" id="d6e6573829d15b27">
        <source>A variable of type [link beast.ref.boost__beast__websocket__stream `websocket::stream&lt;tcp::socket&gt;`] which is already connected with a remote host.</source>
        <target state="needs-translation">A variable of type [link beast.ref.boost__beast__websocket__stream `websocket::stream&lt;tcp::socket&gt;`] which is already connected with a remote host.</target>
        <context-group name="" purpose="location">
          <context context-type="sourcefile">383</context>
        </context-group>
        <note from="developer">type: table cell</note>
      </trans-unit>
    </body>
  </file>
</xliff>
