Boost logo

Boost-Commit :

From: daniel_james_at_[hidden]
Date: 2008-04-27 04:13:59


Author: danieljames
Date: 2008-04-27 04:13:25 EDT (Sun, 27 Apr 2008)
New Revision: 44810
URL: http://svn.boost.org/trac/boost/changeset/44810

Log:
Merge with trunk.
Added:
   branches/doc/boost/asio/detail/descriptor_ops.hpp
      - copied unchanged from r44807, /trunk/boost/asio/detail/descriptor_ops.hpp
   branches/doc/boost/asio/detail/reactive_descriptor_service.hpp
      - copied unchanged from r44807, /trunk/boost/asio/detail/reactive_descriptor_service.hpp
   branches/doc/boost/asio/detail/win_iocp_handle_service.hpp
      - copied unchanged from r44807, /trunk/boost/asio/detail/win_iocp_handle_service.hpp
   branches/doc/boost/asio/local/
      - copied from r44807, /trunk/boost/asio/local/
   branches/doc/boost/asio/local/basic_endpoint.hpp
      - copied unchanged from r44807, /trunk/boost/asio/local/basic_endpoint.hpp
   branches/doc/boost/asio/local/connect_pair.hpp
      - copied unchanged from r44807, /trunk/boost/asio/local/connect_pair.hpp
   branches/doc/boost/asio/local/datagram_protocol.hpp
      - copied unchanged from r44807, /trunk/boost/asio/local/datagram_protocol.hpp
   branches/doc/boost/asio/local/stream_protocol.hpp
      - copied unchanged from r44807, /trunk/boost/asio/local/stream_protocol.hpp
   branches/doc/boost/asio/posix/
      - copied from r44807, /trunk/boost/asio/posix/
   branches/doc/boost/asio/posix/basic_descriptor.hpp
      - copied unchanged from r44807, /trunk/boost/asio/posix/basic_descriptor.hpp
   branches/doc/boost/asio/posix/basic_stream_descriptor.hpp
      - copied unchanged from r44807, /trunk/boost/asio/posix/basic_stream_descriptor.hpp
   branches/doc/boost/asio/posix/descriptor_base.hpp
      - copied unchanged from r44807, /trunk/boost/asio/posix/descriptor_base.hpp
   branches/doc/boost/asio/posix/stream_descriptor.hpp
      - copied unchanged from r44807, /trunk/boost/asio/posix/stream_descriptor.hpp
   branches/doc/boost/asio/posix/stream_descriptor_service.hpp
      - copied unchanged from r44807, /trunk/boost/asio/posix/stream_descriptor_service.hpp
   branches/doc/boost/asio/windows/
      - copied from r44807, /trunk/boost/asio/windows/
   branches/doc/boost/asio/windows/basic_handle.hpp
      - copied unchanged from r44807, /trunk/boost/asio/windows/basic_handle.hpp
   branches/doc/boost/asio/windows/basic_stream_handle.hpp
      - copied unchanged from r44807, /trunk/boost/asio/windows/basic_stream_handle.hpp
   branches/doc/boost/asio/windows/stream_handle.hpp
      - copied unchanged from r44807, /trunk/boost/asio/windows/stream_handle.hpp
   branches/doc/boost/asio/windows/stream_handle_service.hpp
      - copied unchanged from r44807, /trunk/boost/asio/windows/stream_handle_service.hpp
   branches/doc/boost/config/warning_disable.hpp
      - copied unchanged from r44807, /trunk/boost/config/warning_disable.hpp
   branches/doc/boost/detail/lightweight_thread.hpp
      - copied unchanged from r44807, /trunk/boost/detail/lightweight_thread.hpp
   branches/doc/boost/graph/r_c_shortest_paths.hpp
      - copied unchanged from r44807, /trunk/boost/graph/r_c_shortest_paths.hpp
   branches/doc/boost/math/special_functions/detail/round_fwd.hpp
      - copied unchanged from r44807, /trunk/boost/math/special_functions/detail/round_fwd.hpp
   branches/doc/boost/memory_order.hpp
      - copied unchanged from r44807, /trunk/boost/memory_order.hpp
   branches/doc/boost/spirit/home/lex/lexer/lexertl/wrap_action.hpp
      - copied unchanged from r44807, /trunk/boost/spirit/home/lex/lexer/lexertl/wrap_action.hpp
   branches/doc/boost/spirit/home/qi/auxiliary/primitives.hpp
      - copied unchanged from r44807, /trunk/boost/spirit/home/qi/auxiliary/primitives.hpp
   branches/doc/boost/unordered/detail/allocator_helpers.hpp
      - copied unchanged from r44807, /trunk/boost/unordered/detail/allocator_helpers.hpp
   branches/doc/libs/asio/doc/requirements/DescriptorService.qbk
      - copied unchanged from r44807, /trunk/libs/asio/doc/requirements/DescriptorService.qbk
   branches/doc/libs/asio/doc/requirements/HandleService.qbk
      - copied unchanged from r44807, /trunk/libs/asio/doc/requirements/HandleService.qbk
   branches/doc/libs/asio/doc/requirements/StreamDescriptorService.qbk
      - copied unchanged from r44807, /trunk/libs/asio/doc/requirements/StreamDescriptorService.qbk
   branches/doc/libs/asio/doc/requirements/StreamHandleService.qbk
      - copied unchanged from r44807, /trunk/libs/asio/doc/requirements/StreamHandleService.qbk
   branches/doc/libs/asio/example/nonblocking/
      - copied from r44807, /trunk/libs/asio/example/nonblocking/
   branches/doc/libs/asio/example/nonblocking/Jamfile
      - copied unchanged from r44807, /trunk/libs/asio/example/nonblocking/Jamfile
   branches/doc/libs/asio/example/nonblocking/Jamfile.v2
      - copied unchanged from r44807, /trunk/libs/asio/example/nonblocking/Jamfile.v2
   branches/doc/libs/asio/example/nonblocking/third_party_lib.cpp
      - copied unchanged from r44807, /trunk/libs/asio/example/nonblocking/third_party_lib.cpp
   branches/doc/libs/asio/example/porthopper/
      - copied from r44807, /trunk/libs/asio/example/porthopper/
   branches/doc/libs/asio/example/porthopper/Jamfile
      - copied unchanged from r44807, /trunk/libs/asio/example/porthopper/Jamfile
   branches/doc/libs/asio/example/porthopper/Jamfile.v2
      - copied unchanged from r44807, /trunk/libs/asio/example/porthopper/Jamfile.v2
   branches/doc/libs/asio/example/porthopper/client.cpp
      - copied unchanged from r44807, /trunk/libs/asio/example/porthopper/client.cpp
   branches/doc/libs/asio/example/porthopper/protocol.hpp
      - copied unchanged from r44807, /trunk/libs/asio/example/porthopper/protocol.hpp
   branches/doc/libs/asio/example/porthopper/server.cpp
      - copied unchanged from r44807, /trunk/libs/asio/example/porthopper/server.cpp
   branches/doc/libs/asio/test/local/
      - copied from r44807, /trunk/libs/asio/test/local/
   branches/doc/libs/asio/test/local/basic_endpoint.cpp
      - copied unchanged from r44807, /trunk/libs/asio/test/local/basic_endpoint.cpp
   branches/doc/libs/asio/test/local/connect_pair.cpp
      - copied unchanged from r44807, /trunk/libs/asio/test/local/connect_pair.cpp
   branches/doc/libs/asio/test/local/datagram_protocol.cpp
      - copied unchanged from r44807, /trunk/libs/asio/test/local/datagram_protocol.cpp
   branches/doc/libs/asio/test/local/stream_protocol.cpp
      - copied unchanged from r44807, /trunk/libs/asio/test/local/stream_protocol.cpp
   branches/doc/libs/asio/test/posix/
      - copied from r44807, /trunk/libs/asio/test/posix/
   branches/doc/libs/asio/test/posix/basic_descriptor.cpp
      - copied unchanged from r44807, /trunk/libs/asio/test/posix/basic_descriptor.cpp
   branches/doc/libs/asio/test/posix/basic_stream_descriptor.cpp
      - copied unchanged from r44807, /trunk/libs/asio/test/posix/basic_stream_descriptor.cpp
   branches/doc/libs/asio/test/posix/descriptor_base.cpp
      - copied unchanged from r44807, /trunk/libs/asio/test/posix/descriptor_base.cpp
   branches/doc/libs/asio/test/posix/stream_descriptor.cpp
      - copied unchanged from r44807, /trunk/libs/asio/test/posix/stream_descriptor.cpp
   branches/doc/libs/asio/test/posix/stream_descriptor_service.cpp
      - copied unchanged from r44807, /trunk/libs/asio/test/posix/stream_descriptor_service.cpp
   branches/doc/libs/asio/test/windows/
      - copied from r44807, /trunk/libs/asio/test/windows/
   branches/doc/libs/asio/test/windows/basic_handle.cpp
      - copied unchanged from r44807, /trunk/libs/asio/test/windows/basic_handle.cpp
   branches/doc/libs/asio/test/windows/basic_stream_handle.cpp
      - copied unchanged from r44807, /trunk/libs/asio/test/windows/basic_stream_handle.cpp
   branches/doc/libs/asio/test/windows/stream_handle.cpp
      - copied unchanged from r44807, /trunk/libs/asio/test/windows/stream_handle.cpp
   branches/doc/libs/asio/test/windows/stream_handle_service.cpp
      - copied unchanged from r44807, /trunk/libs/asio/test/windows/stream_handle_service.cpp
   branches/doc/libs/bind/test/ref_fn_test.cpp
      - copied unchanged from r44807, /trunk/libs/bind/test/ref_fn_test.cpp
   branches/doc/libs/config/test/boost_no_part_spec_def_args.ipp
      - copied unchanged from r44807, /trunk/libs/config/test/boost_no_part_spec_def_args.ipp
   branches/doc/libs/config/test/boost_no_template_streams.ipp
      - copied unchanged from r44807, /trunk/libs/config/test/boost_no_template_streams.ipp
   branches/doc/libs/config/test/no_part_spec_def_args_fail.cpp
      - copied unchanged from r44807, /trunk/libs/config/test/no_part_spec_def_args_fail.cpp
   branches/doc/libs/config/test/no_part_spec_def_args_pass.cpp
      - copied unchanged from r44807, /trunk/libs/config/test/no_part_spec_def_args_pass.cpp
   branches/doc/libs/config/test/no_template_streams_fail.cpp
      - copied unchanged from r44807, /trunk/libs/config/test/no_template_streams_fail.cpp
   branches/doc/libs/config/test/no_template_streams_pass.cpp
      - copied unchanged from r44807, /trunk/libs/config/test/no_template_streams_pass.cpp
   branches/doc/libs/graph/doc/r_c_shortest_paths.html
      - copied unchanged from r44807, /trunk/libs/graph/doc/r_c_shortest_paths.html
   branches/doc/libs/graph/example/r_c_shortest_paths_example.cpp
      - copied unchanged from r44807, /trunk/libs/graph/example/r_c_shortest_paths_example.cpp
   branches/doc/libs/graph/test/r_c_shortest_paths_test.cpp
      - copied unchanged from r44807, /trunk/libs/graph/test/r_c_shortest_paths_test.cpp
   branches/doc/libs/math/doc/sf_and_dist/equations/generate.sh
      - copied unchanged from r44807, /trunk/libs/math/doc/sf_and_dist/equations/generate.sh
   branches/doc/libs/math/doc/sf_and_dist/equations/ibeta9.png
      - copied unchanged from r44807, /trunk/libs/math/doc/sf_and_dist/equations/ibeta9.png
   branches/doc/libs/math/doc/sf_and_dist/graphs/ellint_carlson.png
      - copied unchanged from r44807, /trunk/libs/math/doc/sf_and_dist/graphs/ellint_carlson.png
   branches/doc/libs/math/doc/sf_and_dist/html/math_toolkit/dist/dist_ref/dists/nc_beta_dist.html
      - copied unchanged from r44807, /trunk/libs/math/doc/sf_and_dist/html/math_toolkit/dist/dist_ref/dists/nc_beta_dist.html
   branches/doc/libs/math/doc/sf_and_dist/html/math_toolkit/dist/dist_ref/dists/nc_chi_squared_dist.html
      - copied unchanged from r44807, /trunk/libs/math/doc/sf_and_dist/html/math_toolkit/dist/dist_ref/dists/nc_chi_squared_dist.html
   branches/doc/libs/math/doc/sf_and_dist/html/math_toolkit/dist/dist_ref/dists/nc_f_dist.html
      - copied unchanged from r44807, /trunk/libs/math/doc/sf_and_dist/html/math_toolkit/dist/dist_ref/dists/nc_f_dist.html
   branches/doc/libs/math/doc/sf_and_dist/html/math_toolkit/dist/dist_ref/dists/nc_t_dist.html
      - copied unchanged from r44807, /trunk/libs/math/doc/sf_and_dist/html/math_toolkit/dist/dist_ref/dists/nc_t_dist.html
   branches/doc/libs/math/doc/sf_and_dist/html/math_toolkit/dist/stat_tut/weg/nccs_eg/
      - copied from r44807, /trunk/libs/math/doc/sf_and_dist/html/math_toolkit/dist/stat_tut/weg/nccs_eg/
   branches/doc/libs/math/doc/sf_and_dist/html/math_toolkit/dist/stat_tut/weg/nccs_eg.html
      - copied unchanged from r44807, /trunk/libs/math/doc/sf_and_dist/html/math_toolkit/dist/stat_tut/weg/nccs_eg.html
   branches/doc/libs/math/doc/sf_and_dist/html/math_toolkit/dist/stat_tut/weg/nccs_eg/nccs_power_eg.html
      - copied unchanged from r44807, /trunk/libs/math/doc/sf_and_dist/html/math_toolkit/dist/stat_tut/weg/nccs_eg/nccs_power_eg.html
   branches/doc/libs/math/doc/sf_and_dist/html/math_toolkit/special/expint/
      - copied from r44807, /trunk/libs/math/doc/sf_and_dist/html/math_toolkit/special/expint/
   branches/doc/libs/math/doc/sf_and_dist/html/math_toolkit/special/expint.html
      - copied unchanged from r44807, /trunk/libs/math/doc/sf_and_dist/html/math_toolkit/special/expint.html
   branches/doc/libs/math/doc/sf_and_dist/html/math_toolkit/special/expint/expint_i.html
      - copied unchanged from r44807, /trunk/libs/math/doc/sf_and_dist/html/math_toolkit/special/expint/expint_i.html
   branches/doc/libs/math/doc/sf_and_dist/html/math_toolkit/special/expint/expint_n.html
      - copied unchanged from r44807, /trunk/libs/math/doc/sf_and_dist/html/math_toolkit/special/expint/expint_n.html
   branches/doc/libs/math/doc/sf_and_dist/html/math_toolkit/special/powers/ct_pow.html
      - copied unchanged from r44807, /trunk/libs/math/doc/sf_and_dist/html/math_toolkit/special/powers/ct_pow.html
   branches/doc/libs/math/doc/sf_and_dist/html/math_toolkit/special/rounding/
      - copied from r44807, /trunk/libs/math/doc/sf_and_dist/html/math_toolkit/special/rounding/
   branches/doc/libs/math/doc/sf_and_dist/html/math_toolkit/special/rounding.html
      - copied unchanged from r44807, /trunk/libs/math/doc/sf_and_dist/html/math_toolkit/special/rounding.html
   branches/doc/libs/math/doc/sf_and_dist/html/math_toolkit/special/rounding/modf.html
      - copied unchanged from r44807, /trunk/libs/math/doc/sf_and_dist/html/math_toolkit/special/rounding/modf.html
   branches/doc/libs/math/doc/sf_and_dist/html/math_toolkit/special/rounding/round.html
      - copied unchanged from r44807, /trunk/libs/math/doc/sf_and_dist/html/math_toolkit/special/rounding/round.html
   branches/doc/libs/math/doc/sf_and_dist/html/math_toolkit/special/rounding/trunc.html
      - copied unchanged from r44807, /trunk/libs/math/doc/sf_and_dist/html/math_toolkit/special/rounding/trunc.html
   branches/doc/libs/math/doc/sf_and_dist/html/math_toolkit/special/zetas/
      - copied from r44807, /trunk/libs/math/doc/sf_and_dist/html/math_toolkit/special/zetas/
   branches/doc/libs/math/doc/sf_and_dist/html/math_toolkit/special/zetas.html
      - copied unchanged from r44807, /trunk/libs/math/doc/sf_and_dist/html/math_toolkit/special/zetas.html
   branches/doc/libs/math/doc/sf_and_dist/html/math_toolkit/special/zetas/zeta.html
      - copied unchanged from r44807, /trunk/libs/math/doc/sf_and_dist/html/math_toolkit/special/zetas/zeta.html
   branches/doc/libs/smart_ptr/test/sp_atomic_mt_test.cpp
      - copied unchanged from r44807, /trunk/libs/smart_ptr/test/sp_atomic_mt_test.cpp
   branches/doc/libs/smart_ptr/test/sp_atomic_test.cpp
      - copied unchanged from r44807, /trunk/libs/smart_ptr/test/sp_atomic_test.cpp
   branches/doc/libs/spirit/test/karma/actions.cpp
      - copied unchanged from r44807, /trunk/libs/spirit/test/karma/actions.cpp
   branches/doc/libs/spirit/test/qi/end.cpp
      - copied unchanged from r44807, /trunk/libs/spirit/test/qi/end.cpp
   branches/doc/tools/regression/src/process_jam_log.py
      - copied unchanged from r44807, /trunk/tools/regression/src/process_jam_log.py
Removed:
   branches/doc/boost/spirit/home/qi/char/primitives.hpp
   branches/doc/boost/spirit/home/support/detail/unordered/
   branches/doc/boost/spirit/home/support/detail/unordered_map.hpp
   branches/doc/boost/spirit/home/support/detail/unordered_set.hpp
   branches/doc/boost/unordered/detail/allocator.hpp
Properties modified:
   branches/doc/ (props changed)
Text files modified:
   branches/doc/Jamroot | 2
   branches/doc/boost/asio.hpp | 13
   branches/doc/boost/asio/basic_io_object.hpp | 12
   branches/doc/boost/asio/basic_streambuf.hpp | 8
   branches/doc/boost/asio/buffer.hpp | 27
   branches/doc/boost/asio/detail/consuming_buffers.hpp | 20
   branches/doc/boost/asio/detail/dev_poll_reactor.hpp | 20
   branches/doc/boost/asio/detail/epoll_reactor.hpp | 14
   branches/doc/boost/asio/detail/kqueue_reactor.hpp | 14
   branches/doc/boost/asio/detail/push_options.hpp | 2
   branches/doc/boost/asio/detail/reactive_socket_service.hpp | 180
   branches/doc/boost/asio/detail/select_reactor.hpp | 6
   branches/doc/boost/asio/detail/service_registry.hpp | 10
   branches/doc/boost/asio/detail/socket_ops.hpp | 16
   branches/doc/boost/asio/detail/socket_types.hpp | 2
   branches/doc/boost/asio/detail/win_iocp_io_service.hpp | 29
   branches/doc/boost/asio/detail/win_iocp_socket_service.hpp | 284
   branches/doc/boost/asio/error.hpp | 3
   branches/doc/boost/asio/ssl/detail/openssl_operation.hpp | 9
   branches/doc/boost/asio/version.hpp | 2
   branches/doc/boost/config/compiler/intel.hpp | 6
   branches/doc/boost/config/compiler/vacpp.hpp | 2
   branches/doc/boost/config/platform/macos.hpp | 8
   branches/doc/boost/config/suffix.hpp | 9
   branches/doc/boost/detail/shared_count.hpp | 44
   branches/doc/boost/detail/yield_k.hpp | 6
   branches/doc/boost/enable_shared_from_this.hpp | 110
   branches/doc/boost/exception/enable_error_info.hpp | 4
   branches/doc/boost/exception/info.hpp | 6
   branches/doc/boost/exception_ptr.hpp | 8
   branches/doc/boost/function_types/detail/pp_retag_default_cc/master.hpp | 4
   branches/doc/boost/function_types/detail/pp_retag_default_cc/preprocessed.hpp | 4
   branches/doc/boost/function_types/detail/pp_tags/master.hpp | 2
   branches/doc/boost/function_types/detail/pp_tags/preprocessed.hpp | 2
   branches/doc/boost/fusion/adapted/array/detail/category_of_impl.hpp | 2
   branches/doc/boost/fusion/adapted/array/tag_of.hpp | 2
   branches/doc/boost/fusion/adapted/boost_tuple/tag_of.hpp | 4
   branches/doc/boost/fusion/adapted/std_pair.hpp | 4
   branches/doc/boost/fusion/adapted/std_pair/detail/category_of_impl.hpp | 2
   branches/doc/boost/fusion/adapted/std_pair/std_pair_iterator.hpp | 2
   branches/doc/boost/fusion/adapted/std_pair/tag_of.hpp | 2
   branches/doc/boost/fusion/adapted/struct/adapt_assoc_struct.hpp | 2
   branches/doc/boost/fusion/adapted/struct/adapt_struct.hpp | 2
   branches/doc/boost/fusion/adapted/struct/detail/category_of_impl.hpp | 2
   branches/doc/boost/fusion/adapted/struct/struct_iterator.hpp | 2
   branches/doc/boost/fusion/algorithm/transformation/transform.hpp | 2
   branches/doc/boost/fusion/algorithm/transformation/zip.hpp | 2
   branches/doc/boost/fusion/container/generation/deque_tie.hpp | 2
   branches/doc/boost/fusion/container/generation/list_tie.hpp | 2
   branches/doc/boost/fusion/container/generation/make_deque.hpp | 2
   branches/doc/boost/fusion/container/generation/make_list.hpp | 2
   branches/doc/boost/fusion/container/generation/make_map.hpp | 2
   branches/doc/boost/fusion/container/generation/make_set.hpp | 2
   branches/doc/boost/fusion/container/generation/make_vector.hpp | 2
   branches/doc/boost/fusion/container/generation/map_tie.hpp | 2
   branches/doc/boost/fusion/container/generation/vector_tie.hpp | 2
   branches/doc/boost/fusion/container/list/detail/end_impl.hpp | 2
   branches/doc/boost/fusion/support/tag_of.hpp | 2
   branches/doc/boost/fusion/view/transform_view/transform_view.hpp | 2
   branches/doc/boost/math/concepts/real_concept.hpp | 122
   branches/doc/boost/math/concepts/std_real_concept.hpp | 147
   branches/doc/boost/math/special_functions/detail/t_distribution_inv.hpp | 1
   branches/doc/boost/math/special_functions/math_fwd.hpp | 39
   branches/doc/boost/math/tools/config.hpp | 10
   branches/doc/boost/optional/optional.hpp | 104
   branches/doc/boost/shared_ptr.hpp | 97
   branches/doc/boost/spirit/home/classic/namespace.hpp | 11
   branches/doc/boost/spirit/home/karma/detail/output_iterator.hpp | 6
   branches/doc/boost/spirit/home/karma/detail/string_generate.hpp | 8
   branches/doc/boost/spirit/home/karma/numeric/detail/numeric_utils.hpp | 11
   branches/doc/boost/spirit/home/lex/lexer/lexer.hpp | 4
   branches/doc/boost/spirit/home/lex/lexer/lexertl/lexertl_functor.hpp | 40
   branches/doc/boost/spirit/home/lex/lexer/lexertl/lexertl_iterator.hpp | 2
   branches/doc/boost/spirit/home/lex/lexer/lexertl/lexertl_lexer.hpp | 9
   branches/doc/boost/spirit/home/lex/lexer/lexertl/lexertl_static_functor.hpp | 44
   branches/doc/boost/spirit/home/lex/lexer/lexertl/lexertl_static_lexer.hpp | 4
   branches/doc/boost/spirit/home/lex/lexer/lexertl/lexertl_token.hpp | 4
   branches/doc/boost/spirit/home/lex/lexer/token_def.hpp | 4
   branches/doc/boost/spirit/home/lex/lexer/token_set.hpp | 4
   branches/doc/boost/spirit/home/phoenix/operator/io.hpp | 4
   branches/doc/boost/spirit/home/phoenix/statement/detail/switch.hpp | 12
   branches/doc/boost/spirit/home/qi/auxiliary.hpp | 1
   branches/doc/boost/spirit/home/qi/auxiliary/meta_grammar.hpp | 41
   branches/doc/boost/spirit/home/qi/char.hpp | 1
   branches/doc/boost/spirit/home/qi/char/char.hpp | 53
   branches/doc/boost/spirit/home/qi/char/meta_grammar.hpp | 7
   branches/doc/boost/spirit/home/qi/numeric/detail/numeric_utils.hpp | 14
   branches/doc/boost/spirit/home/qi/numeric/detail/real_impl.hpp | 11
   branches/doc/boost/spirit/home/qi/operator/list.hpp | 6
   branches/doc/boost/spirit/home/qi/skip.hpp | 2
   branches/doc/boost/spirit/home/qi/string/tst_map.hpp | 2
   branches/doc/boost/spirit/home/support/argument.hpp | 38
   branches/doc/boost/spirit/home/support/as_variant.hpp | 45
   branches/doc/boost/spirit/home/support/detail/action_dispatch.hpp | 9
   branches/doc/boost/spirit/home/support/detail/hold_any.hpp | 15
   branches/doc/boost/spirit/home/support/detail/lexer/consts.hpp | 9
   branches/doc/boost/spirit/home/support/detail/lexer/generator.hpp | 4
   branches/doc/boost/spirit/home/support/detail/lexer/parser/parser.hpp | 4
   branches/doc/boost/spirit/home/support/detail/lexer/parser/tokeniser/num_token.hpp | 9
   branches/doc/boost/spirit/home/support/detail/lexer/parser/tokeniser/re_tokeniser.hpp | 8
   branches/doc/boost/spirit/home/support/detail/lexer/parser/tokeniser/re_tokeniser_helper.hpp | 4
   branches/doc/boost/spirit/home/support/detail/lexer/string_token.hpp | 2
   branches/doc/boost/spirit/home/support/iterators/detail/buf_id_check_policy.hpp | 2
   branches/doc/boost/spirit/home/support/iterators/detail/combine_policies.hpp | 5
   branches/doc/boost/spirit/home/support/iterators/detail/first_owner_policy.hpp | 2
   branches/doc/boost/spirit/home/support/iterators/detail/input_iterator_policy.hpp | 4
   branches/doc/boost/spirit/home/support/iterators/detail/lex_input_policy.hpp | 8
   branches/doc/boost/spirit/home/support/iterators/detail/multi_pass.hpp | 18
   branches/doc/boost/spirit/home/support/iterators/detail/no_check_policy.hpp | 2
   branches/doc/boost/spirit/home/support/iterators/detail/ref_counted_policy.hpp | 4
   branches/doc/boost/spirit/home/support/iterators/detail/split_functor_input_policy.hpp | 5
   branches/doc/boost/spirit/home/support/iterators/detail/split_std_deque_policy.hpp | 2
   branches/doc/boost/spirit/home/support/placeholders.hpp | 2
   branches/doc/boost/thread/win32/condition_variable.hpp | 230
   branches/doc/boost/thread/win32/thread.hpp | 3
   branches/doc/boost/unordered/detail/hash_table.hpp | 36
   branches/doc/boost/unordered/detail/hash_table_impl.hpp | 453
   branches/doc/boost/unordered/detail/move.hpp | 8
   branches/doc/boost/unordered_map.hpp | 29
   branches/doc/boost/unordered_set.hpp | 30
   branches/doc/boost/utility/addressof.hpp | 39
   branches/doc/boost/wave/cpplexer/cpp_lex_iterator.hpp | 9
   branches/doc/boost/wave/util/macro_helpers.hpp | 8
   branches/doc/libs/asio/doc/design/implementation.qbk | 46
   branches/doc/libs/asio/doc/quickref.xml | 23
   branches/doc/libs/asio/doc/reference.dox | 3
   branches/doc/libs/asio/doc/reference.qbk | 15701 +++++++++++++++++++++++++++++++--------
   branches/doc/libs/asio/doc/reference.xsl | 108
   branches/doc/libs/asio/doc/using.qbk | 7
   branches/doc/libs/asio/example/invocation/prioritised_handlers.cpp | 23
   branches/doc/libs/asio/test/Jamfile | 13
   branches/doc/libs/asio/test/Jamfile.v2 | 26
   branches/doc/libs/asio/test/basic_datagram_socket.cpp | 2
   branches/doc/libs/asio/test/basic_deadline_timer.cpp | 2
   branches/doc/libs/asio/test/basic_socket_acceptor.cpp | 2
   branches/doc/libs/asio/test/basic_stream_socket.cpp | 2
   branches/doc/libs/asio/test/buffer.cpp | 2
   branches/doc/libs/asio/test/buffered_read_stream.cpp | 2
   branches/doc/libs/asio/test/buffered_stream.cpp | 2
   branches/doc/libs/asio/test/buffered_write_stream.cpp | 2
   branches/doc/libs/asio/test/completion_condition.cpp | 2
   branches/doc/libs/asio/test/datagram_socket_service.cpp | 2
   branches/doc/libs/asio/test/deadline_timer.cpp | 2
   branches/doc/libs/asio/test/deadline_timer_service.cpp | 2
   branches/doc/libs/asio/test/error.cpp | 2
   branches/doc/libs/asio/test/io_service.cpp | 2
   branches/doc/libs/asio/test/ip/address.cpp | 2
   branches/doc/libs/asio/test/ip/address_v4.cpp | 2
   branches/doc/libs/asio/test/ip/address_v6.cpp | 2
   branches/doc/libs/asio/test/ip/basic_endpoint.cpp | 2
   branches/doc/libs/asio/test/ip/basic_resolver.cpp | 2
   branches/doc/libs/asio/test/ip/basic_resolver_entry.cpp | 2
   branches/doc/libs/asio/test/ip/basic_resolver_iterator.cpp | 2
   branches/doc/libs/asio/test/ip/basic_resolver_query.cpp | 2
   branches/doc/libs/asio/test/ip/host_name.cpp | 2
   branches/doc/libs/asio/test/ip/multicast.cpp | 2
   branches/doc/libs/asio/test/ip/resolver_query_base.cpp | 2
   branches/doc/libs/asio/test/ip/resolver_service.cpp | 2
   branches/doc/libs/asio/test/ip/tcp.cpp | 17
   branches/doc/libs/asio/test/ip/udp.cpp | 39
   branches/doc/libs/asio/test/ip/unicast.cpp | 2
   branches/doc/libs/asio/test/ip/v6_only.cpp | 2
   branches/doc/libs/asio/test/is_read_buffered.cpp | 2
   branches/doc/libs/asio/test/is_write_buffered.cpp | 2
   branches/doc/libs/asio/test/placeholders.cpp | 2
   branches/doc/libs/asio/test/read.cpp | 2
   branches/doc/libs/asio/test/read_until.cpp | 2
   branches/doc/libs/asio/test/socket_acceptor_service.cpp | 2
   branches/doc/libs/asio/test/socket_base.cpp | 2
   branches/doc/libs/asio/test/ssl/basic_context.cpp | 2
   branches/doc/libs/asio/test/ssl/context.cpp | 2
   branches/doc/libs/asio/test/ssl/context_base.cpp | 2
   branches/doc/libs/asio/test/ssl/context_service.cpp | 2
   branches/doc/libs/asio/test/ssl/stream.cpp | 2
   branches/doc/libs/asio/test/ssl/stream_base.cpp | 2
   branches/doc/libs/asio/test/ssl/stream_service.cpp | 2
   branches/doc/libs/asio/test/strand.cpp | 2
   branches/doc/libs/asio/test/stream_socket_service.cpp | 2
   branches/doc/libs/asio/test/time_traits.cpp | 2
   branches/doc/libs/asio/test/unit_test.hpp | 1
   branches/doc/libs/asio/test/write.cpp | 2
   branches/doc/libs/bind/test/Jamfile.v2 | 1
   branches/doc/libs/config/doc/guidelines.qbk | 26
   branches/doc/libs/config/doc/html/boost_config/boost_macro_reference.html | 35
   branches/doc/libs/config/doc/html/boost_config/guidelines_for_boost_authors.html | 81
   branches/doc/libs/config/doc/html/index.html | 6
   branches/doc/libs/config/doc/macro_reference.qbk | 7
   branches/doc/libs/config/test/all/Jamfile.v2 | 8
   branches/doc/libs/config/test/config_info.cpp | 6
   branches/doc/libs/config/test/config_test.cpp | 22
   branches/doc/libs/filesystem/doc/reference.html | 6
   branches/doc/libs/filesystem/test/convenience_test.cpp | 2
   branches/doc/libs/filesystem/test/fstream_test.cpp | 3
   branches/doc/libs/filesystem/test/operations_test.cpp | 4
   branches/doc/libs/filesystem/test/wide_test.cpp | 3
   branches/doc/libs/graph/doc/history.html | 6
   branches/doc/libs/graph/doc/table_of_contents.html | 1
   branches/doc/libs/graph/test/Jamfile.v2 | 2
   branches/doc/libs/math/doc/sf_and_dist/credits.qbk | 7
   branches/doc/libs/math/doc/sf_and_dist/erf.qbk | 29
   branches/doc/libs/math/doc/sf_and_dist/fpclassify.qbk | 31
   branches/doc/libs/math/doc/sf_and_dist/html/index.html | 4
   branches/doc/libs/math/doc/sf_and_dist/html/math_toolkit/backgrounders/implementation.html | 30
   branches/doc/libs/math/doc/sf_and_dist/html/math_toolkit/backgrounders/lanczos.html | 14
   branches/doc/libs/math/doc/sf_and_dist/html/math_toolkit/backgrounders/refs.html | 6
   branches/doc/libs/math/doc/sf_and_dist/html/math_toolkit/backgrounders/relative_error.html | 2
   branches/doc/libs/math/doc/sf_and_dist/html/math_toolkit/backgrounders/remez.html | 16
   branches/doc/libs/math/doc/sf_and_dist/html/math_toolkit/main_overview/history1.html | 2
   branches/doc/libs/math/doc/sf_and_dist/html/math_toolkit/perf/comp_compilers.html | 2
   branches/doc/libs/math/doc/sf_and_dist/html/math_toolkit/perf/comparisons.html | 30
   branches/doc/libs/math/doc/sf_and_dist/html/math_toolkit/perf/getting_best.html | 2
   branches/doc/libs/math/doc/sf_and_dist/html/math_toolkit/perf/tuning.html | 4
   branches/doc/libs/math/doc/sf_and_dist/html/math_toolkit/policy/pol_ref/discrete_quant_ref.html | 12
   branches/doc/libs/math/doc/sf_and_dist/html/math_toolkit/policy/pol_ref/error_handling_policies.html | 14
   branches/doc/libs/math/doc/sf_and_dist/html/math_toolkit/policy/pol_ref/internal_promotion.html | 2
   branches/doc/libs/math/doc/sf_and_dist/html/math_toolkit/policy/pol_ref/policy_defaults.html | 30
   branches/doc/libs/math/doc/sf_and_dist/html/math_toolkit/policy/pol_tutorial/understand_dis_quant.html | 2
   branches/doc/libs/math/doc/sf_and_dist/html/math_toolkit/special.html | 2
   branches/doc/libs/math/doc/sf_and_dist/html/math_toolkit/special/bessel/bessel.html | 14
   branches/doc/libs/math/doc/sf_and_dist/html/math_toolkit/special/bessel/bessel_over.html | 6
   branches/doc/libs/math/doc/sf_and_dist/html/math_toolkit/special/bessel/mbessel.html | 14
   branches/doc/libs/math/doc/sf_and_dist/html/math_toolkit/special/bessel/sph_bessel.html | 10
   branches/doc/libs/math/doc/sf_and_dist/html/math_toolkit/special/ellint/ellint_1.html | 12
   branches/doc/libs/math/doc/sf_and_dist/html/math_toolkit/special/ellint/ellint_2.html | 12
   branches/doc/libs/math/doc/sf_and_dist/html/math_toolkit/special/ellint/ellint_3.html | 12
   branches/doc/libs/math/doc/sf_and_dist/html/math_toolkit/special/ellint/ellint_carlson.html | 12
   branches/doc/libs/math/doc/sf_and_dist/html/math_toolkit/special/ellint/ellint_intro.html | 12
   branches/doc/libs/math/doc/sf_and_dist/html/math_toolkit/special/fpclass.html | 42
   branches/doc/libs/math/doc/sf_and_dist/html/math_toolkit/special/powers/cbrt.html | 4
   branches/doc/libs/math/doc/sf_and_dist/html/math_toolkit/special/powers/expm1.html | 4
   branches/doc/libs/math/doc/sf_and_dist/html/math_toolkit/special/powers/hypot.html | 2
   branches/doc/libs/math/doc/sf_and_dist/html/math_toolkit/special/powers/log1p.html | 4
   branches/doc/libs/math/doc/sf_and_dist/html/math_toolkit/special/powers/powm1.html | 4
   branches/doc/libs/math/doc/sf_and_dist/html/math_toolkit/special/powers/sqrt1pm1.html | 4
   branches/doc/libs/math/doc/sf_and_dist/html/math_toolkit/special/sf_erf/error_function.html | 41
   branches/doc/libs/math/doc/sf_and_dist/html/math_toolkit/special/sf_erf/error_inv.html | 10
   branches/doc/libs/math/doc/sf_and_dist/html/math_toolkit/special/sf_poly/hermite.html | 12
   branches/doc/libs/math/doc/sf_and_dist/html/math_toolkit/special/sf_poly/laguerre.html | 14
   branches/doc/libs/math/doc/sf_and_dist/html/math_toolkit/special/sf_poly/legendre.html | 16
   branches/doc/libs/math/doc/sf_and_dist/html/math_toolkit/special/sf_poly/sph_harm.html | 12
   branches/doc/libs/math/doc/sf_and_dist/html/math_toolkit/status/compilers.html | 4
   branches/doc/libs/math/doc/sf_and_dist/html/math_toolkit/status/credits.html | 8
   branches/doc/libs/math/doc/sf_and_dist/html/math_toolkit/status/history1.html | 14
   branches/doc/libs/math/doc/sf_and_dist/html/math_toolkit/status/issues.html | 16
   branches/doc/libs/math/doc/sf_and_dist/html/math_toolkit/toolkit.html | 2
   branches/doc/libs/math/doc/sf_and_dist/html/math_toolkit/toolkit/internals1/cf.html | 8
   branches/doc/libs/math/doc/sf_and_dist/html/math_toolkit/toolkit/internals1/minima.html | 6
   branches/doc/libs/math/doc/sf_and_dist/html/math_toolkit/toolkit/internals1/rational.html | 6
   branches/doc/libs/math/doc/sf_and_dist/html/math_toolkit/toolkit/internals1/roots.html | 12
   branches/doc/libs/math/doc/sf_and_dist/html/math_toolkit/toolkit/internals1/roots2.html | 6
   branches/doc/libs/math/doc/sf_and_dist/html/math_toolkit/toolkit/internals1/series_evaluation.html | 6
   branches/doc/libs/math/doc/sf_and_dist/html/math_toolkit/toolkit/internals2/error_test.html | 6
   branches/doc/libs/math/doc/sf_and_dist/html/math_toolkit/toolkit/internals2/polynomials.html | 4
   branches/doc/libs/math/doc/sf_and_dist/html/math_toolkit/toolkit/internals2/test_data.html | 12
   branches/doc/libs/math/doc/sf_and_dist/html/math_toolkit/using_udt/concepts.html | 4
   branches/doc/libs/math/doc/sf_and_dist/roadmap.qbk | 2
   branches/doc/libs/math/test/compile_test/instantiate.hpp | 42
   branches/doc/libs/math/vc71_fix/instantiate_all.cpp | 4
   branches/doc/libs/optional/test/optional_test.cpp | 187
   branches/doc/libs/smart_ptr/test/Jamfile.v2 | 1
   branches/doc/libs/smart_ptr/test/esft_regtest.cpp | 37
   branches/doc/libs/smart_ptr/test/shared_ptr_mt_test.cpp | 139
   branches/doc/libs/smart_ptr/test/weak_ptr_mt_test.cpp | 132
   branches/doc/libs/spirit/doc/lex/lexer_quickstart2.qbk | 49
   branches/doc/libs/spirit/example/karma/Jamfile | 1
   branches/doc/libs/spirit/example/lex/static_lexer/word_count_generate.cpp | 2
   branches/doc/libs/spirit/example/lex/static_lexer/word_count_static.hpp | 10
   branches/doc/libs/spirit/example/lex/word_count_lexer.cpp | 9
   branches/doc/libs/spirit/example/qi/calc2.cpp | 20
   branches/doc/libs/spirit/example/qi/calc5.cpp | 6
   branches/doc/libs/spirit/example/qi/calc6/calc6.hpp | 2
   branches/doc/libs/spirit/example/qi/calc6/calc6a.cpp | 4
   branches/doc/libs/spirit/example/qi/calc7/calc7.hpp | 2
   branches/doc/libs/spirit/example/qi/calc7/calc7a.cpp | 4
   branches/doc/libs/spirit/test/Jamfile | 2
   branches/doc/libs/spirit/test/karma/alternative.cpp | 1
   branches/doc/libs/spirit/test/karma/binary.cpp | 1
   branches/doc/libs/spirit/test/karma/case_handling.cpp | 1
   branches/doc/libs/spirit/test/karma/center_alignment.cpp | 7
   branches/doc/libs/spirit/test/karma/char.cpp | 1
   branches/doc/libs/spirit/test/karma/delimiter.cpp | 1
   branches/doc/libs/spirit/test/karma/eps.cpp | 1
   branches/doc/libs/spirit/test/karma/format_manip.cpp | 1
   branches/doc/libs/spirit/test/karma/functor.cpp | 2
   branches/doc/libs/spirit/test/karma/grammar.cpp | 1
   branches/doc/libs/spirit/test/karma/grammar_fail.cpp | 1
   branches/doc/libs/spirit/test/karma/int_numerics.cpp | 3
   branches/doc/libs/spirit/test/karma/kleene.cpp | 1
   branches/doc/libs/spirit/test/karma/lazy.cpp | 1
   branches/doc/libs/spirit/test/karma/left_alignment.cpp | 1
   branches/doc/libs/spirit/test/karma/list.cpp | 6
   branches/doc/libs/spirit/test/karma/lit.cpp | 1
   branches/doc/libs/spirit/test/karma/none.cpp | 1
   branches/doc/libs/spirit/test/karma/optional.cpp | 1
   branches/doc/libs/spirit/test/karma/pattern.cpp | 1
   branches/doc/libs/spirit/test/karma/real_numerics.cpp | 9
   branches/doc/libs/spirit/test/karma/right_alignment.cpp | 1
   branches/doc/libs/spirit/test/karma/rule_fail.cpp | 1
   branches/doc/libs/spirit/test/karma/sequence.cpp | 1
   branches/doc/libs/spirit/test/karma/test.hpp | 5
   branches/doc/libs/spirit/test/qi/actions.cpp | 1
   branches/doc/libs/spirit/test/qi/char.cpp | 32
   branches/doc/libs/spirit/test/qi/debug.cpp | 2
   branches/doc/libs/spirit/test/qi/difference.cpp | 2
   branches/doc/libs/spirit/test/qi/no_case.cpp | 2
   branches/doc/libs/spirit/test/qi/real.cpp | 4
   branches/doc/libs/spirit/test/support/hold_any.cpp | 16
   branches/doc/libs/unordered/doc/ref.xml | 214
   branches/doc/libs/unordered/test/exception/insert_exception_tests.cpp | 35
   branches/doc/libs/unordered/test/objects/exception.hpp | 10
   branches/doc/libs/unordered/test/objects/memory.hpp | 2
   branches/doc/libs/unordered/test/objects/minimal.hpp | 8
   branches/doc/libs/unordered/test/objects/test.hpp | 7
   branches/doc/libs/unordered/test/unordered/compile_tests.hpp | 21
   branches/doc/libs/unordered/test/unordered/insert_tests.cpp | 80
   branches/doc/libs/unordered/test/unordered/unnecessary_copy_tests.cpp | 236
   branches/doc/libs/wave/samples/cpp_tokens/slex_iterator.hpp | 4
   branches/doc/libs/wave/samples/list_includes/lexertl_iterator.hpp | 6
   branches/doc/libs/wave/test/build/Jamfile.v2 | 2
   branches/doc/status/Jamfile.v2 | 187
   branches/doc/tools/build/v2/contrib/boost.jam | 2
   branches/doc/tools/build/v2/tools/intel-darwin.jam | 7
   branches/doc/tools/build/v2/tools/pathscale.jam | 4
   branches/doc/tools/build/v2/tools/pgi.jam | 6
   branches/doc/tools/build/v2/tools/testing.jam | 4
   325 files changed, 16335 insertions(+), 5024 deletions(-)

Modified: branches/doc/Jamroot
==============================================================================
--- branches/doc/Jamroot (original)
+++ branches/doc/Jamroot 2008-04-27 04:13:25 EDT (Sun, 27 Apr 2008)
@@ -497,7 +497,7 @@
 }
 
 # Make project ids of all libraries known.
-for local l in $(libraries)
+for local l in $(all-libraries)
 {
     use-project /boost/$(l) : libs/$(l)/build ;
 }

Modified: branches/doc/boost/asio.hpp
==============================================================================
--- branches/doc/boost/asio.hpp (original)
+++ branches/doc/boost/asio.hpp 2008-04-27 04:13:25 EDT (Sun, 27 Apr 2008)
@@ -58,7 +58,16 @@
 #include <boost/asio/ip/v6_only.hpp>
 #include <boost/asio/is_read_buffered.hpp>
 #include <boost/asio/is_write_buffered.hpp>
+#include <boost/asio/local/basic_endpoint.hpp>
+#include <boost/asio/local/connect_pair.hpp>
+#include <boost/asio/local/datagram_protocol.hpp>
+#include <boost/asio/local/stream_protocol.hpp>
 #include <boost/asio/placeholders.hpp>
+#include <boost/asio/posix/basic_descriptor.hpp>
+#include <boost/asio/posix/basic_stream_descriptor.hpp>
+#include <boost/asio/posix/descriptor_base.hpp>
+#include <boost/asio/posix/stream_descriptor.hpp>
+#include <boost/asio/posix/stream_descriptor_service.hpp>
 #include <boost/asio/read.hpp>
 #include <boost/asio/read_until.hpp>
 #include <boost/asio/socket_acceptor_service.hpp>
@@ -68,6 +77,10 @@
 #include <boost/asio/streambuf.hpp>
 #include <boost/asio/time_traits.hpp>
 #include <boost/asio/version.hpp>
+#include <boost/asio/windows/basic_handle.hpp>
+#include <boost/asio/windows/basic_stream_handle.hpp>
+#include <boost/asio/windows/stream_handle.hpp>
+#include <boost/asio/windows/stream_handle_service.hpp>
 #include <boost/asio/write.hpp>
 
 #endif // BOOST_ASIO_HPP

Modified: branches/doc/boost/asio/basic_io_object.hpp
==============================================================================
--- branches/doc/boost/asio/basic_io_object.hpp (original)
+++ branches/doc/boost/asio/basic_io_object.hpp 2008-04-27 04:13:25 EDT (Sun, 27 Apr 2008)
@@ -64,6 +64,10 @@
 
 protected:
   /// Construct a basic_io_object.
+ /**
+ * Performs:
+ * @code service.construct(implementation); @endcode
+ */
   explicit basic_io_object(boost::asio::io_service& io_service)
     : service(boost::asio::use_service<IoObjectService>(io_service))
   {
@@ -71,15 +75,19 @@
   }
 
   /// Protected destructor to prevent deletion through this type.
+ /**
+ * Performs:
+ * @code service.destroy(implementation); @endcode
+ */
   ~basic_io_object()
   {
     service.destroy(implementation);
   }
 
- // The backend service implementation.
+ /// The service associated with the I/O object.
   service_type& service;
 
- // The underlying native implementation.
+ /// The underlying implementation of the I/O object.
   implementation_type implementation;
 };
 

Modified: branches/doc/boost/asio/basic_streambuf.hpp
==============================================================================
--- branches/doc/boost/asio/basic_streambuf.hpp (original)
+++ branches/doc/boost/asio/basic_streambuf.hpp 2008-04-27 04:13:25 EDT (Sun, 27 Apr 2008)
@@ -101,11 +101,9 @@
   /// Move the start of the get area by the specified number of characters.
   void consume(std::size_t n)
   {
- while (n > 0)
- {
- sbumpc();
- --n;
- }
+ if (gptr() + n > pptr())
+ n = pptr() - gptr();
+ gbump(static_cast<int>(n));
   }
 
 protected:

Modified: branches/doc/boost/asio/buffer.hpp
==============================================================================
--- branches/doc/boost/asio/buffer.hpp (original)
+++ branches/doc/boost/asio/buffer.hpp 2008-04-27 04:13:25 EDT (Sun, 27 Apr 2008)
@@ -379,6 +379,33 @@
   }
 };
 
+/// An implementation of both the ConstBufferSequence and MutableBufferSequence
+/// concepts to represent a null buffer sequence.
+class null_buffers
+{
+public:
+ /// The type for each element in the list of buffers.
+ typedef mutable_buffer value_type;
+
+ /// A random-access iterator type that may be used to read elements.
+ typedef const mutable_buffer* const_iterator;
+
+ /// Get a random-access iterator to the first element.
+ const_iterator begin() const
+ {
+ return &buf_;
+ }
+
+ /// Get a random-access iterator for one past the last element.
+ const_iterator end() const
+ {
+ return &buf_;
+ }
+
+private:
+ mutable_buffer buf_;
+};
+
 #if defined(BOOST_ASIO_ENABLE_BUFFER_DEBUGGING)
 namespace detail {
 

Modified: branches/doc/boost/asio/detail/consuming_buffers.hpp
==============================================================================
--- branches/doc/boost/asio/detail/consuming_buffers.hpp (original)
+++ branches/doc/boost/asio/detail/consuming_buffers.hpp 2008-04-27 04:13:25 EDT (Sun, 27 Apr 2008)
@@ -24,6 +24,8 @@
 #include <boost/iterator/iterator_facade.hpp>
 #include <boost/asio/detail/pop_options.hpp>
 
+#include <boost/asio/buffer.hpp>
+
 namespace boost {
 namespace asio {
 namespace detail {
@@ -198,6 +200,24 @@
   typename Buffers::const_iterator begin_remainder_;
 };
 
+// Specialisation for null_buffers to ensure that the null_buffers type is
+// always passed through to the underlying read or write operation.
+template <typename Buffer>
+class consuming_buffers<Buffer, boost::asio::null_buffers>
+ : public boost::asio::null_buffers
+{
+public:
+ consuming_buffers(const boost::asio::null_buffers&)
+ {
+ // No-op.
+ }
+
+ void consume(std::size_t)
+ {
+ // No-op.
+ }
+};
+
 } // namespace detail
 } // namespace asio
 } // namespace boost

Modified: branches/doc/boost/asio/detail/dev_poll_reactor.hpp
==============================================================================
--- branches/doc/boost/asio/detail/dev_poll_reactor.hpp (original)
+++ branches/doc/boost/asio/detail/dev_poll_reactor.hpp 2008-04-27 04:13:25 EDT (Sun, 27 Apr 2008)
@@ -128,16 +128,18 @@
   // Start a new read operation. The handler object will be invoked when the
   // given descriptor is ready to be read, or an error has occurred.
   template <typename Handler>
- void start_read_op(socket_type descriptor, Handler handler)
+ void start_read_op(socket_type descriptor, Handler handler,
+ bool allow_speculative_read = true)
   {
     boost::asio::detail::mutex::scoped_lock lock(mutex_);
 
     if (shutdown_)
       return;
 
- if (!read_op_queue_.has_operation(descriptor))
- if (handler(boost::system::error_code()))
- return;
+ if (allow_speculative_read)
+ if (!read_op_queue_.has_operation(descriptor))
+ if (handler(boost::system::error_code()))
+ return;
 
     if (read_op_queue_.enqueue_operation(descriptor, handler))
     {
@@ -154,16 +156,18 @@
   // Start a new write operation. The handler object will be invoked when the
   // given descriptor is ready to be written, or an error has occurred.
   template <typename Handler>
- void start_write_op(socket_type descriptor, Handler handler)
+ void start_write_op(socket_type descriptor, Handler handler,
+ bool allow_speculative_write = true)
   {
     boost::asio::detail::mutex::scoped_lock lock(mutex_);
 
     if (shutdown_)
       return;
 
- if (!write_op_queue_.has_operation(descriptor))
- if (handler(boost::system::error_code()))
- return;
+ if (allow_speculative_write)
+ if (!write_op_queue_.has_operation(descriptor))
+ if (handler(boost::system::error_code()))
+ return;
 
     if (write_op_queue_.enqueue_operation(descriptor, handler))
     {

Modified: branches/doc/boost/asio/detail/epoll_reactor.hpp
==============================================================================
--- branches/doc/boost/asio/detail/epoll_reactor.hpp (original)
+++ branches/doc/boost/asio/detail/epoll_reactor.hpp 2008-04-27 04:13:25 EDT (Sun, 27 Apr 2008)
@@ -135,14 +135,17 @@
   // Start a new read operation. The handler object will be invoked when the
   // given descriptor is ready to be read, or an error has occurred.
   template <typename Handler>
- void start_read_op(socket_type descriptor, Handler handler)
+ void start_read_op(socket_type descriptor, Handler handler,
+ bool allow_speculative_read = true)
   {
     boost::asio::detail::mutex::scoped_lock lock(mutex_);
 
     if (shutdown_)
       return;
 
- if (!read_op_queue_.has_operation(descriptor))
+ if (!allow_speculative_read)
+ need_epoll_wait_ = true;
+ else if (!read_op_queue_.has_operation(descriptor))
       if (handler(boost::system::error_code()))
         return;
 
@@ -171,14 +174,17 @@
   // Start a new write operation. The handler object will be invoked when the
   // given descriptor is ready to be written, or an error has occurred.
   template <typename Handler>
- void start_write_op(socket_type descriptor, Handler handler)
+ void start_write_op(socket_type descriptor, Handler handler,
+ bool allow_speculative_write = true)
   {
     boost::asio::detail::mutex::scoped_lock lock(mutex_);
 
     if (shutdown_)
       return;
 
- if (!write_op_queue_.has_operation(descriptor))
+ if (!allow_speculative_write)
+ need_epoll_wait_ = true;
+ else if (!write_op_queue_.has_operation(descriptor))
       if (handler(boost::system::error_code()))
         return;
 

Modified: branches/doc/boost/asio/detail/kqueue_reactor.hpp
==============================================================================
--- branches/doc/boost/asio/detail/kqueue_reactor.hpp (original)
+++ branches/doc/boost/asio/detail/kqueue_reactor.hpp 2008-04-27 04:13:25 EDT (Sun, 27 Apr 2008)
@@ -135,14 +135,17 @@
   // Start a new read operation. The handler object will be invoked when the
   // given descriptor is ready to be read, or an error has occurred.
   template <typename Handler>
- void start_read_op(socket_type descriptor, Handler handler)
+ void start_read_op(socket_type descriptor, Handler handler,
+ bool allow_speculative_read = true)
   {
     boost::asio::detail::mutex::scoped_lock lock(mutex_);
 
     if (shutdown_)
       return;
 
- if (!read_op_queue_.has_operation(descriptor))
+ if (!allow_speculative_read)
+ need_kqueue_wait_ = true;
+ else if (!read_op_queue_.has_operation(descriptor))
       if (handler(boost::system::error_code()))
         return;
 
@@ -162,14 +165,17 @@
   // Start a new write operation. The handler object will be invoked when the
   // given descriptor is ready to be written, or an error has occurred.
   template <typename Handler>
- void start_write_op(socket_type descriptor, Handler handler)
+ void start_write_op(socket_type descriptor, Handler handler,
+ bool allow_speculative_write = true)
   {
     boost::asio::detail::mutex::scoped_lock lock(mutex_);
 
     if (shutdown_)
       return;
 
- if (!write_op_queue_.has_operation(descriptor))
+ if (!allow_speculative_write)
+ need_kqueue_wait_ = true;
+ else if (!write_op_queue_.has_operation(descriptor))
       if (handler(boost::system::error_code()))
         return;
 

Modified: branches/doc/boost/asio/detail/push_options.hpp
==============================================================================
--- branches/doc/boost/asio/detail/push_options.hpp (original)
+++ branches/doc/boost/asio/detail/push_options.hpp 2008-04-27 04:13:25 EDT (Sun, 27 Apr 2008)
@@ -87,8 +87,10 @@
 
 # pragma warning (disable:4103)
 # pragma warning (push)
+# pragma warning (disable:4127)
 # pragma warning (disable:4244)
 # pragma warning (disable:4355)
+# pragma warning (disable:4512)
 # pragma warning (disable:4675)
 # if defined(_M_IX86) && defined(_Wp64)
 // The /Wp64 option is broken. If you want to check 64 bit portability, use a

Modified: branches/doc/boost/asio/detail/reactive_socket_service.hpp
==============================================================================
--- branches/doc/boost/asio/detail/reactive_socket_service.hpp (original)
+++ branches/doc/boost/asio/detail/reactive_socket_service.hpp 2008-04-27 04:13:25 EDT (Sun, 27 Apr 2008)
@@ -559,6 +559,22 @@
     }
   }
 
+ // Wait until data can be sent without blocking.
+ size_t send(implementation_type& impl, const null_buffers&,
+ socket_base::message_flags, boost::system::error_code& ec)
+ {
+ if (!is_open(impl))
+ {
+ ec = boost::asio::error::bad_descriptor;
+ return 0;
+ }
+
+ // Wait for socket to become ready.
+ socket_ops::poll_write(impl.socket_, ec);
+
+ return 0;
+ }
+
   template <typename ConstBufferSequence, typename Handler>
   class send_handler
   {
@@ -673,6 +689,45 @@
     }
   }
 
+ template <typename Handler>
+ class null_buffers_handler
+ {
+ public:
+ null_buffers_handler(boost::asio::io_service& io_service, Handler handler)
+ : work_(io_service),
+ handler_(handler)
+ {
+ }
+
+ bool operator()(const boost::system::error_code& result)
+ {
+ work_.get_io_service().post(bind_handler(handler_, result, 0));
+ return true;
+ }
+
+ private:
+ boost::asio::io_service::work work_;
+ Handler handler_;
+ };
+
+ // Start an asynchronous wait until data can be sent without blocking.
+ template <typename Handler>
+ void async_send(implementation_type& impl, const null_buffers&,
+ socket_base::message_flags, Handler handler)
+ {
+ if (!is_open(impl))
+ {
+ this->get_io_service().post(bind_handler(handler,
+ boost::asio::error::bad_descriptor, 0));
+ }
+ else
+ {
+ reactor_.start_write_op(impl.socket_,
+ null_buffers_handler<Handler>(this->get_io_service(), handler),
+ false);
+ }
+ }
+
   // Send a datagram to the specified endpoint. Returns the number of bytes
   // sent.
   template <typename ConstBufferSequence>
@@ -734,6 +789,23 @@
     }
   }
 
+ // Wait until data can be sent without blocking.
+ size_t send_to(implementation_type& impl, const null_buffers&,
+ socket_base::message_flags, const endpoint_type&,
+ boost::system::error_code& ec)
+ {
+ if (!is_open(impl))
+ {
+ ec = boost::asio::error::bad_descriptor;
+ return 0;
+ }
+
+ // Wait for socket to become ready.
+ socket_ops::poll_write(impl.socket_, ec);
+
+ return 0;
+ }
+
   template <typename ConstBufferSequence, typename Handler>
   class send_to_handler
   {
@@ -832,6 +904,24 @@
     }
   }
 
+ // Start an asynchronous wait until data can be sent without blocking.
+ template <typename Handler>
+ void async_send_to(implementation_type& impl, const null_buffers&,
+ socket_base::message_flags, const endpoint_type&, Handler handler)
+ {
+ if (!is_open(impl))
+ {
+ this->get_io_service().post(bind_handler(handler,
+ boost::asio::error::bad_descriptor, 0));
+ }
+ else
+ {
+ reactor_.start_write_op(impl.socket_,
+ null_buffers_handler<Handler>(this->get_io_service(), handler),
+ false);
+ }
+ }
+
   // Receive some data from the peer. Returns the number of bytes received.
   template <typename MutableBufferSequence>
   size_t receive(implementation_type& impl,
@@ -907,6 +997,23 @@
     }
   }
 
+ // Wait until data can be received without blocking.
+ size_t receive(implementation_type& impl,
+ const null_buffers& buffers,
+ socket_base::message_flags, boost::system::error_code& ec)
+ {
+ if (!is_open(impl))
+ {
+ ec = boost::asio::error::bad_descriptor;
+ return 0;
+ }
+
+ // Wait for socket to become ready.
+ socket_ops::poll_read(impl.socket_, ec);
+
+ return 0;
+ }
+
   template <typename MutableBufferSequence, typename Handler>
   class receive_handler
   {
@@ -1033,6 +1140,29 @@
     }
   }
 
+ // Wait until data can be received without blocking.
+ template <typename Handler>
+ void async_receive(implementation_type& impl, const null_buffers&,
+ socket_base::message_flags flags, Handler handler)
+ {
+ if (!is_open(impl))
+ {
+ this->get_io_service().post(bind_handler(handler,
+ boost::asio::error::bad_descriptor, 0));
+ }
+ else if (flags & socket_base::message_out_of_band)
+ {
+ reactor_.start_except_op(impl.socket_,
+ null_buffers_handler<Handler>(this->get_io_service(), handler));
+ }
+ else
+ {
+ reactor_.start_read_op(impl.socket_,
+ null_buffers_handler<Handler>(this->get_io_service(), handler),
+ false);
+ }
+ }
+
   // Receive a datagram with the endpoint of the sender. Returns the number of
   // bytes received.
   template <typename MutableBufferSequence>
@@ -1106,6 +1236,26 @@
     }
   }
 
+ // Wait until data can be received without blocking.
+ size_t receive_from(implementation_type& impl,
+ const null_buffers& buffers, endpoint_type& sender_endpoint,
+ socket_base::message_flags, boost::system::error_code& ec)
+ {
+ if (!is_open(impl))
+ {
+ ec = boost::asio::error::bad_descriptor;
+ return 0;
+ }
+
+ // Wait for socket to become ready.
+ socket_ops::poll_read(impl.socket_, ec);
+
+ // Reset endpoint since it can be given no sensible value at this time.
+ sender_endpoint = endpoint_type();
+
+ return 0;
+ }
+
   template <typename MutableBufferSequence, typename Handler>
   class receive_from_handler
   {
@@ -1209,6 +1359,36 @@
     }
   }
 
+ // Wait until data can be received without blocking.
+ template <typename Handler>
+ void async_receive_from(implementation_type& impl,
+ const null_buffers&, endpoint_type& sender_endpoint,
+ socket_base::message_flags flags, Handler handler)
+ {
+ if (!is_open(impl))
+ {
+ this->get_io_service().post(bind_handler(handler,
+ boost::asio::error::bad_descriptor, 0));
+ }
+ else
+ {
+ // Reset endpoint since it can be given no sensible value at this time.
+ sender_endpoint = endpoint_type();
+
+ if (flags & socket_base::message_out_of_band)
+ {
+ reactor_.start_except_op(impl.socket_,
+ null_buffers_handler<Handler>(this->get_io_service(), handler));
+ }
+ else
+ {
+ reactor_.start_read_op(impl.socket_,
+ null_buffers_handler<Handler>(this->get_io_service(), handler),
+ false);
+ }
+ }
+ }
+
   // Accept a new connection.
   template <typename Socket>
   boost::system::error_code accept(implementation_type& impl,

Modified: branches/doc/boost/asio/detail/select_reactor.hpp
==============================================================================
--- branches/doc/boost/asio/detail/select_reactor.hpp (original)
+++ branches/doc/boost/asio/detail/select_reactor.hpp 2008-04-27 04:13:25 EDT (Sun, 27 Apr 2008)
@@ -115,7 +115,8 @@
   // Start a new read operation. The handler object will be invoked when the
   // given descriptor is ready to be read, or an error has occurred.
   template <typename Handler>
- void start_read_op(socket_type descriptor, Handler handler)
+ void start_read_op(socket_type descriptor, Handler handler,
+ bool /*allow_speculative_read*/ = true)
   {
     boost::asio::detail::mutex::scoped_lock lock(mutex_);
     if (!shutdown_)
@@ -126,7 +127,8 @@
   // Start a new write operation. The handler object will be invoked when the
   // given descriptor is ready to be written, or an error has occurred.
   template <typename Handler>
- void start_write_op(socket_type descriptor, Handler handler)
+ void start_write_op(socket_type descriptor, Handler handler,
+ bool /*allow_speculative_write*/ = true)
   {
     boost::asio::detail::mutex::scoped_lock lock(mutex_);
     if (!shutdown_)

Modified: branches/doc/boost/asio/detail/service_registry.hpp
==============================================================================
--- branches/doc/boost/asio/detail/service_registry.hpp (original)
+++ branches/doc/boost/asio/detail/service_registry.hpp 2008-04-27 04:13:25 EDT (Sun, 27 Apr 2008)
@@ -27,6 +27,12 @@
 #include <boost/asio/detail/noncopyable.hpp>
 #include <boost/asio/detail/service_id.hpp>
 
+#if defined(BOOST_NO_TYPEID)
+# if !defined(BOOST_ASIO_NO_TYPEID)
+# define BOOST_ASIO_NO_TYPEID
+# endif // !defined(BOOST_ASIO_NO_TYPEID)
+#endif // defined(BOOST_NO_TYPEID)
+
 namespace boost {
 namespace asio {
 namespace detail {
@@ -157,6 +163,7 @@
     service.id_ = &id;
   }
 
+#if !defined(BOOST_ASIO_NO_TYPEID)
   // Set a service's id.
   template <typename Service>
   void init_service_id(boost::asio::io_service::service& service,
@@ -165,6 +172,7 @@
     service.type_info_ = &typeid(Service);
     service.id_ = 0;
   }
+#endif // !defined(BOOST_ASIO_NO_TYPEID)
 
   // Check if a service matches the given id.
   static bool service_id_matches(
@@ -174,6 +182,7 @@
     return service.id_ == &id;
   }
 
+#if !defined(BOOST_ASIO_NO_TYPEID)
   // Check if a service matches the given id.
   template <typename Service>
   static bool service_id_matches(
@@ -182,6 +191,7 @@
   {
     return service.type_info_ != 0 && *service.type_info_ == typeid(Service);
   }
+#endif // !defined(BOOST_ASIO_NO_TYPEID)
 
   // Mutex to protect access to internal data.
   mutable boost::asio::detail::mutex mutex_;

Modified: branches/doc/boost/asio/detail/socket_ops.hpp
==============================================================================
--- branches/doc/boost/asio/detail/socket_ops.hpp (original)
+++ branches/doc/boost/asio/detail/socket_ops.hpp 2008-04-27 04:13:25 EDT (Sun, 27 Apr 2008)
@@ -176,6 +176,22 @@
   return result;
 }
 
+inline int socketpair(int af, int type, int protocol,
+ socket_type sv[2], boost::system::error_code& ec)
+{
+#if defined(BOOST_WINDOWS) || defined(__CYGWIN__)
+ (void)(af);
+ (void)(type);
+ (void)(protocol);
+ (void)(sv);
+ ec = boost::asio::error::operation_not_supported;
+ return -1;
+#else
+ clear_error(ec);
+ return error_wrapper(::socketpair(af, type, protocol, sv), ec);
+#endif
+}
+
 inline int listen(socket_type s, int backlog, boost::system::error_code& ec)
 {
   clear_error(ec);

Modified: branches/doc/boost/asio/detail/socket_types.hpp
==============================================================================
--- branches/doc/boost/asio/detail/socket_types.hpp (original)
+++ branches/doc/boost/asio/detail/socket_types.hpp 2008-04-27 04:13:25 EDT (Sun, 27 Apr 2008)
@@ -99,6 +99,7 @@
 # endif
 # include <sys/socket.h>
 # include <sys/uio.h>
+# include <sys/un.h>
 # include <netinet/in.h>
 # include <netinet/tcp.h>
 # include <arpa/inet.h>
@@ -176,6 +177,7 @@
 typedef ipv6_mreq in6_mreq_type;
 typedef sockaddr_in6 sockaddr_in6_type;
 typedef sockaddr_storage sockaddr_storage_type;
+typedef sockaddr_un sockaddr_un_type;
 typedef addrinfo addrinfo_type;
 typedef int ioctl_arg_type;
 typedef uint32_t u_long_type;

Modified: branches/doc/boost/asio/detail/win_iocp_io_service.hpp
==============================================================================
--- branches/doc/boost/asio/detail/win_iocp_io_service.hpp (original)
+++ branches/doc/boost/asio/detail/win_iocp_io_service.hpp 2008-04-27 04:13:25 EDT (Sun, 27 Apr 2008)
@@ -150,9 +150,20 @@
   }
 
   // Register a handle with the IO completion port.
- void register_handle(HANDLE handle)
+ boost::system::error_code register_handle(
+ HANDLE handle, boost::system::error_code& ec)
   {
- ::CreateIoCompletionPort(handle, iocp_.handle, 0, 0);
+ if (::CreateIoCompletionPort(handle, iocp_.handle, 0, 0) == 0)
+ {
+ DWORD last_error = ::GetLastError();
+ ec = boost::system::error_code(last_error,
+ boost::asio::error::get_system_category());
+ }
+ else
+ {
+ ec = boost::system::error_code();
+ }
+ return ec;
   }
 
   // Run the event loop until stopped or no more work.
@@ -505,16 +516,18 @@
       }
       else
       {
+ // Relinquish responsibility for dispatching timers. If the io_service
+ // is not being stopped then the thread will get an opportunity to
+ // reacquire timer responsibility on the next loop iteration.
+ if (dispatching_timers)
+ {
+ ::InterlockedCompareExchange(&timer_thread_, 0, this_thread_id);
+ }
+
         // The stopped_ flag is always checked to ensure that any leftover
         // interrupts from a previous run invocation are ignored.
         if (::InterlockedExchangeAdd(&stopped_, 0) != 0)
         {
- // Relinquish responsibility for dispatching timers.
- if (dispatching_timers)
- {
- ::InterlockedCompareExchange(&timer_thread_, 0, this_thread_id);
- }
-
           // Wake up next thread that is blocked on GetQueuedCompletionStatus.
           if (!::PostQueuedCompletionStatus(iocp_.handle, 0, 0, 0))
           {

Modified: branches/doc/boost/asio/detail/win_iocp_socket_service.hpp
==============================================================================
--- branches/doc/boost/asio/detail/win_iocp_socket_service.hpp (original)
+++ branches/doc/boost/asio/detail/win_iocp_socket_service.hpp 2008-04-27 04:13:25 EDT (Sun, 27 Apr 2008)
@@ -24,6 +24,7 @@
 #include <boost/asio/detail/push_options.hpp>
 #include <cstring>
 #include <boost/shared_ptr.hpp>
+#include <boost/type_traits/is_same.hpp>
 #include <boost/weak_ptr.hpp>
 #include <boost/asio/detail/pop_options.hpp>
 
@@ -252,7 +253,8 @@
       return ec;
 
     HANDLE sock_as_handle = reinterpret_cast<HANDLE>(sock.get());
- iocp_service_.register_handle(sock_as_handle);
+ if (iocp_service_.register_handle(sock_as_handle, ec))
+ return ec;
 
     impl.socket_ = sock.release();
     impl.flags_ = 0;
@@ -273,7 +275,8 @@
       return ec;
     }
 
- iocp_service_.register_handle(native_socket.as_handle());
+ if (iocp_service_.register_handle(native_socket.as_handle(), ec))
+ return ec;
 
     impl.socket_ = native_socket;
     impl.flags_ = 0;
@@ -700,6 +703,22 @@
     return bytes_transferred;
   }
 
+ // Wait until data can be sent without blocking.
+ size_t send(implementation_type& impl, const null_buffers&,
+ socket_base::message_flags, boost::system::error_code& ec)
+ {
+ if (!is_open(impl))
+ {
+ ec = boost::asio::error::bad_descriptor;
+ return 0;
+ }
+
+ // Wait for socket to become ready.
+ socket_ops::poll_write(impl.socket_, ec);
+
+ return 0;
+ }
+
   template <typename ConstBufferSequence, typename Handler>
   class send_operation
     : public operation
@@ -858,6 +877,57 @@
     }
   }
 
+ template <typename Handler>
+ class null_buffers_handler
+ {
+ public:
+ null_buffers_handler(boost::asio::io_service& io_service, Handler handler)
+ : work_(io_service),
+ handler_(handler)
+ {
+ }
+
+ bool operator()(const boost::system::error_code& result)
+ {
+ work_.get_io_service().post(bind_handler(handler_, result, 0));
+ return true;
+ }
+
+ private:
+ boost::asio::io_service::work work_;
+ Handler handler_;
+ };
+
+ // Start an asynchronous wait until data can be sent without blocking.
+ template <typename Handler>
+ void async_send(implementation_type& impl, const null_buffers&,
+ socket_base::message_flags, Handler handler)
+ {
+ if (!is_open(impl))
+ {
+ this->get_io_service().post(bind_handler(handler,
+ boost::asio::error::bad_descriptor, 0));
+ }
+ else
+ {
+ // Check if the reactor was already obtained from the io_service.
+ reactor_type* reactor = static_cast<reactor_type*>(
+ interlocked_compare_exchange_pointer(
+ reinterpret_cast<void**>(&reactor_), 0, 0));
+ if (!reactor)
+ {
+ reactor = &(boost::asio::use_service<reactor_type>(
+ this->get_io_service()));
+ interlocked_exchange_pointer(
+ reinterpret_cast<void**>(&reactor_), reactor);
+ }
+
+ reactor->start_write_op(impl.socket_,
+ null_buffers_handler<Handler>(this->get_io_service(), handler),
+ false);
+ }
+ }
+
   // Send a datagram to the specified endpoint. Returns the number of bytes
   // sent.
   template <typename ConstBufferSequence>
@@ -902,6 +972,23 @@
     return bytes_transferred;
   }
 
+ // Wait until data can be sent without blocking.
+ size_t send_to(implementation_type& impl, const null_buffers&,
+ socket_base::message_flags, const endpoint_type&,
+ boost::system::error_code& ec)
+ {
+ if (!is_open(impl))
+ {
+ ec = boost::asio::error::bad_descriptor;
+ return 0;
+ }
+
+ // Wait for socket to become ready.
+ socket_ops::poll_write(impl.socket_, ec);
+
+ return 0;
+ }
+
   template <typename ConstBufferSequence, typename Handler>
   class send_to_operation
     : public operation
@@ -1038,6 +1125,36 @@
     }
   }
 
+ // Start an asynchronous wait until data can be sent without blocking.
+ template <typename Handler>
+ void async_send_to(implementation_type& impl, const null_buffers&,
+ socket_base::message_flags, const endpoint_type&, Handler handler)
+ {
+ if (!is_open(impl))
+ {
+ this->get_io_service().post(bind_handler(handler,
+ boost::asio::error::bad_descriptor, 0));
+ }
+ else
+ {
+ // Check if the reactor was already obtained from the io_service.
+ reactor_type* reactor = static_cast<reactor_type*>(
+ interlocked_compare_exchange_pointer(
+ reinterpret_cast<void**>(&reactor_), 0, 0));
+ if (!reactor)
+ {
+ reactor = &(boost::asio::use_service<reactor_type>(
+ this->get_io_service()));
+ interlocked_exchange_pointer(
+ reinterpret_cast<void**>(&reactor_), reactor);
+ }
+
+ reactor->start_write_op(impl.socket_,
+ null_buffers_handler<Handler>(this->get_io_service(), handler),
+ false);
+ }
+ }
+
   // Receive some data from the peer. Returns the number of bytes received.
   template <typename MutableBufferSequence>
   size_t receive(implementation_type& impl,
@@ -1097,6 +1214,22 @@
     return bytes_transferred;
   }
 
+ // Wait until data can be received without blocking.
+ size_t receive(implementation_type& impl, const null_buffers&,
+ socket_base::message_flags, boost::system::error_code& ec)
+ {
+ if (!is_open(impl))
+ {
+ ec = boost::asio::error::bad_descriptor;
+ return 0;
+ }
+
+ // Wait for socket to become ready.
+ socket_ops::poll_read(impl.socket_, ec);
+
+ return 0;
+ }
+
   template <typename MutableBufferSequence, typename Handler>
   class receive_operation
     : public operation
@@ -1157,7 +1290,8 @@
       }
 
       // Check for connection closed.
- else if (!ec && bytes_transferred == 0)
+ else if (!ec && bytes_transferred == 0
+ && !boost::is_same<MutableBufferSequence, null_buffers>::value)
       {
         ec = boost::asio::error::eof;
       }
@@ -1262,6 +1396,84 @@
     }
   }
 
+ // Wait until data can be received without blocking.
+ template <typename Handler>
+ void async_receive(implementation_type& impl, const null_buffers& buffers,
+ socket_base::message_flags flags, Handler handler)
+ {
+ if (!is_open(impl))
+ {
+ this->get_io_service().post(bind_handler(handler,
+ boost::asio::error::bad_descriptor, 0));
+ }
+ else if (impl.protocol_.type() == SOCK_STREAM)
+ {
+ // For stream sockets on Windows, we may issue a 0-byte overlapped
+ // WSARecv to wait until there is data available on the socket.
+
+#if defined(BOOST_ASIO_ENABLE_CANCELIO)
+ // Update the ID of the thread from which cancellation is safe.
+ if (impl.safe_cancellation_thread_id_ == 0)
+ impl.safe_cancellation_thread_id_ = ::GetCurrentThreadId();
+ else if (impl.safe_cancellation_thread_id_ != ::GetCurrentThreadId())
+ impl.safe_cancellation_thread_id_ = ~DWORD(0);
+#endif // defined(BOOST_ASIO_ENABLE_CANCELIO)
+
+ // Allocate and construct an operation to wrap the handler.
+ typedef receive_operation<null_buffers, Handler> value_type;
+ typedef handler_alloc_traits<Handler, value_type> alloc_traits;
+ raw_handler_ptr<alloc_traits> raw_ptr(handler);
+ handler_ptr<alloc_traits> ptr(raw_ptr, iocp_service_,
+ impl.cancel_token_, buffers, handler);
+
+ // Issue a receive operation with an empty buffer.
+ ::WSABUF buf = { 0, 0 };
+ DWORD bytes_transferred = 0;
+ DWORD recv_flags = flags;
+ int result = ::WSARecv(impl.socket_, &buf, 1,
+ &bytes_transferred, &recv_flags, ptr.get(), 0);
+ DWORD last_error = ::WSAGetLastError();
+ if (result != 0 && last_error != WSA_IO_PENDING)
+ {
+ boost::asio::io_service::work work(this->get_io_service());
+ ptr.reset();
+ boost::system::error_code ec(last_error,
+ boost::asio::error::get_system_category());
+ iocp_service_.post(bind_handler(handler, ec, bytes_transferred));
+ }
+ else
+ {
+ ptr.release();
+ }
+ }
+ else
+ {
+ // Check if the reactor was already obtained from the io_service.
+ reactor_type* reactor = static_cast<reactor_type*>(
+ interlocked_compare_exchange_pointer(
+ reinterpret_cast<void**>(&reactor_), 0, 0));
+ if (!reactor)
+ {
+ reactor = &(boost::asio::use_service<reactor_type>(
+ this->get_io_service()));
+ interlocked_exchange_pointer(
+ reinterpret_cast<void**>(&reactor_), reactor);
+ }
+
+ if (flags & socket_base::message_out_of_band)
+ {
+ reactor->start_except_op(impl.socket_,
+ null_buffers_handler<Handler>(this->get_io_service(), handler));
+ }
+ else
+ {
+ reactor->start_read_op(impl.socket_,
+ null_buffers_handler<Handler>(this->get_io_service(), handler),
+ false);
+ }
+ }
+ }
+
   // Receive a datagram with the endpoint of the sender. Returns the number of
   // bytes received.
   template <typename MutableBufferSequence>
@@ -1315,6 +1527,26 @@
     return bytes_transferred;
   }
 
+ // Wait until data can be received without blocking.
+ size_t receive_from(implementation_type& impl,
+ const null_buffers&, endpoint_type& sender_endpoint,
+ socket_base::message_flags, boost::system::error_code& ec)
+ {
+ if (!is_open(impl))
+ {
+ ec = boost::asio::error::bad_descriptor;
+ return 0;
+ }
+
+ // Wait for socket to become ready.
+ socket_ops::poll_read(impl.socket_, ec);
+
+ // Reset endpoint since it can be given no sensible value at this time.
+ sender_endpoint = endpoint_type();
+
+ return 0;
+ }
+
   template <typename MutableBufferSequence, typename Handler>
   class receive_from_operation
     : public operation
@@ -1473,6 +1705,48 @@
     }
   }
 
+ // Wait until data can be received without blocking.
+ template <typename Handler>
+ void async_receive_from(implementation_type& impl,
+ const null_buffers&, endpoint_type& sender_endpoint,
+ socket_base::message_flags flags, Handler handler)
+ {
+ if (!is_open(impl))
+ {
+ this->get_io_service().post(bind_handler(handler,
+ boost::asio::error::bad_descriptor, 0));
+ }
+ else
+ {
+ // Check if the reactor was already obtained from the io_service.
+ reactor_type* reactor = static_cast<reactor_type*>(
+ interlocked_compare_exchange_pointer(
+ reinterpret_cast<void**>(&reactor_), 0, 0));
+ if (!reactor)
+ {
+ reactor = &(boost::asio::use_service<reactor_type>(
+ this->get_io_service()));
+ interlocked_exchange_pointer(
+ reinterpret_cast<void**>(&reactor_), reactor);
+ }
+
+ // Reset endpoint since it can be given no sensible value at this time.
+ sender_endpoint = endpoint_type();
+
+ if (flags & socket_base::message_out_of_band)
+ {
+ reactor->start_except_op(impl.socket_,
+ null_buffers_handler<Handler>(this->get_io_service(), handler));
+ }
+ else
+ {
+ reactor->start_read_op(impl.socket_,
+ null_buffers_handler<Handler>(this->get_io_service(), handler),
+ false);
+ }
+ }
+ }
+
   // Accept a new connection.
   template <typename Socket>
   boost::system::error_code accept(implementation_type& impl, Socket& peer,
@@ -1493,7 +1767,6 @@
 
     for (;;)
     {
- boost::system::error_code ec;
       socket_holder new_socket;
       std::size_t addr_len = 0;
       if (peer_endpoint)
@@ -1571,8 +1844,7 @@
     }
 
   private:
- static void do_completion_impl(operation* op,
- DWORD last_error, size_t bytes_transferred)
+ static void do_completion_impl(operation* op, DWORD last_error, size_t)
     {
       // Take ownership of the operation object.
       typedef accept_operation<Socket, Handler> op_type;

Modified: branches/doc/boost/asio/error.hpp
==============================================================================
--- branches/doc/boost/asio/error.hpp (original)
+++ branches/doc/boost/asio/error.hpp 2008-04-27 04:13:25 EDT (Sun, 27 Apr 2008)
@@ -106,6 +106,9 @@
   /// Message too long.
   message_size = BOOST_ASIO_SOCKET_ERROR(EMSGSIZE),
 
+ /// The name was too long.
+ name_too_long = BOOST_ASIO_SOCKET_ERROR(ENAMETOOLONG),
+
   /// Network is down.
   network_down = BOOST_ASIO_SOCKET_ERROR(ENETDOWN),
 

Modified: branches/doc/boost/asio/ssl/detail/openssl_operation.hpp
==============================================================================
--- branches/doc/boost/asio/ssl/detail/openssl_operation.hpp (original)
+++ branches/doc/boost/asio/ssl/detail/openssl_operation.hpp 2008-04-27 04:13:25 EDT (Sun, 27 Apr 2008)
@@ -169,14 +169,11 @@
       ((::SSL_get_shutdown( session_ ) & SSL_SENT_SHUTDOWN) ==
             SSL_SENT_SHUTDOWN);
 
- if (is_shut_down_sent && is_shut_down_received && is_operation_done)
+ if (is_shut_down_sent && is_shut_down_received && is_operation_done && !is_write_needed)
       // SSL connection is shut down cleanly
       return handler_(boost::system::error_code(), 1);
 
- if (is_shut_down_received && !is_write_needed)
- return handler_(boost::asio::error::eof, 0);
-
- if (is_shut_down_received)
+ if (is_shut_down_received && !is_operation_done)
       // Shutdown has been requested, while we were reading or writing...
       // abort our action...
       return handler_(boost::asio::error::shut_down, 0);
@@ -226,7 +223,7 @@
 
         return start();
       }
- else if (is_read_needed)
+ else if (is_read_needed || (is_shut_down_sent && !is_shut_down_received))
       {
         return read_();
       }

Modified: branches/doc/boost/asio/version.hpp
==============================================================================
--- branches/doc/boost/asio/version.hpp (original)
+++ branches/doc/boost/asio/version.hpp 2008-04-27 04:13:25 EDT (Sun, 27 Apr 2008)
@@ -18,6 +18,6 @@
 // BOOST_ASIO_VERSION % 100 is the sub-minor version
 // BOOST_ASIO_VERSION / 100 % 1000 is the minor version
 // BOOST_ASIO_VERSION / 100000 is the major version
-#define BOOST_ASIO_VERSION 309 // 0.3.9
+#define BOOST_ASIO_VERSION 100000 // 1.0.0
 
 #endif // BOOST_ASIO_VERSION_HPP

Modified: branches/doc/boost/config/compiler/intel.hpp
==============================================================================
--- branches/doc/boost/config/compiler/intel.hpp (original)
+++ branches/doc/boost/config/compiler/intel.hpp 2008-04-27 04:13:25 EDT (Sun, 27 Apr 2008)
@@ -146,6 +146,12 @@
 #if BOOST_INTEL_CXX_VERSION < 500
 # error "Compiler not supported or configured - please reconfigure"
 #endif
+
+// Intel on MacOS requires
+#if defined(__APPLE__) && defined(__INTEL_COMPILER)
+# define BOOST_NO_TWO_PHASE_NAME_LOOKUP
+#endif
+
 //
 // last known and checked version:
 #if (BOOST_INTEL_CXX_VERSION > 1010)

Modified: branches/doc/boost/config/compiler/vacpp.hpp
==============================================================================
--- branches/doc/boost/config/compiler/vacpp.hpp (original)
+++ branches/doc/boost/config/compiler/vacpp.hpp 2008-04-27 04:13:25 EDT (Sun, 27 Apr 2008)
@@ -53,7 +53,7 @@
 #endif
 
 // Some versions of the compiler have issues with default arguments on partial specializations
-#define BOOST_PARTIAL_SPECIALIZATION_EXPLICT_ARGS
+#define BOOST_NO_PARTIAL_SPECIALIZATION_IMPLICIT_DEFAULT_ARGS
 
 
 

Modified: branches/doc/boost/config/platform/macos.hpp
==============================================================================
--- branches/doc/boost/config/platform/macos.hpp (original)
+++ branches/doc/boost/config/platform/macos.hpp 2008-04-27 04:13:25 EDT (Sun, 27 Apr 2008)
@@ -47,6 +47,14 @@
 # define BOOST_NO_STDC_NAMESPACE
 # endif
 
+# if (__GNUC__ == 4)
+
+// Both gcc and intel require these.
+# define BOOST_HAS_PTHREAD_MUTEXATTR_SETTYPE
+# define BOOST_HAS_NANOSLEEP
+
+# endif
+
 #else
 
 // Using the MSL C library.

Modified: branches/doc/boost/config/suffix.hpp
==============================================================================
--- branches/doc/boost/config/suffix.hpp (original)
+++ branches/doc/boost/config/suffix.hpp 2008-04-27 04:13:25 EDT (Sun, 27 Apr 2008)
@@ -121,6 +121,15 @@
 # endif
 
 //
+// Without partial specialization, partial
+// specialization with default args won't work either:
+//
+# if defined(BOOST_NO_TEMPLATE_PARTIAL_SPECIALIZATION) \
+ && !defined(BOOST_NO_PARTIAL_SPECIALIZATION_IMPLICIT_DEFAULT_ARGS)
+# define BOOST_NO_PARTIAL_SPECIALIZATION_IMPLICIT_DEFAULT_ARGS
+# endif
+
+//
 // Without member template support, we can't have template constructors
 // in the standard library either:
 //

Modified: branches/doc/boost/detail/shared_count.hpp
==============================================================================
--- branches/doc/boost/detail/shared_count.hpp (original)
+++ branches/doc/boost/detail/shared_count.hpp 2008-04-27 04:13:25 EDT (Sun, 27 Apr 2008)
@@ -28,8 +28,11 @@
 #include <boost/detail/bad_weak_ptr.hpp>
 #include <boost/detail/sp_counted_base.hpp>
 #include <boost/detail/sp_counted_impl.hpp>
-
-#include <memory> // std::auto_ptr
+// In order to avoid circular dependencies with Boost.TR1
+// we make sure that our include of <memory> doesn't try to
+// pull in the TR1 headers: that's why we use this header
+// rather than including <memory> directly:
+#include <boost/config/no_tr1/memory.hpp> // std::auto_ptr
 #include <functional> // std::less
 #include <new> // std::bad_alloc
 
@@ -217,6 +220,18 @@
         if( pi_ != 0 ) pi_->add_ref_copy();
     }
 
+#if defined( BOOST_HAS_RVALUE_REFS )
+
+ shared_count(shared_count && r): pi_(r.pi_) // nothrow
+#if defined(BOOST_SP_ENABLE_DEBUG_HOOKS)
+ , id_(shared_count_id)
+#endif
+ {
+ r.pi_ = 0;
+ }
+
+#endif
+
     explicit shared_count(weak_count const & r); // throws bad_weak_ptr when r.use_count() == 0
     shared_count( weak_count const & r, sp_nothrow_tag ); // constructs an empty *this when r.use_count() == 0
 
@@ -321,9 +336,13 @@
     weak_count & operator= (shared_count const & r) // nothrow
     {
         sp_counted_base * tmp = r.pi_;
- if(tmp != 0) tmp->weak_add_ref();
- if(pi_ != 0) pi_->weak_release();
- pi_ = tmp;
+
+ if( tmp != pi_ )
+ {
+ if(tmp != 0) tmp->weak_add_ref();
+ if(pi_ != 0) pi_->weak_release();
+ pi_ = tmp;
+ }
 
         return *this;
     }
@@ -331,9 +350,13 @@
     weak_count & operator= (weak_count const & r) // nothrow
     {
         sp_counted_base * tmp = r.pi_;
- if(tmp != 0) tmp->weak_add_ref();
- if(pi_ != 0) pi_->weak_release();
- pi_ = tmp;
+
+ if( tmp != pi_ )
+ {
+ if(tmp != 0) tmp->weak_add_ref();
+ if(pi_ != 0) pi_->weak_release();
+ pi_ = tmp;
+ }
 
         return *this;
     }
@@ -350,6 +373,11 @@
         return pi_ != 0? pi_->use_count(): 0;
     }
 
+ bool empty() const // nothrow
+ {
+ return pi_ == 0;
+ }
+
     friend inline bool operator==(weak_count const & a, weak_count const & b)
     {
         return a.pi_ == b.pi_;

Modified: branches/doc/boost/detail/yield_k.hpp
==============================================================================
--- branches/doc/boost/detail/yield_k.hpp (original)
+++ branches/doc/boost/detail/yield_k.hpp 2008-04-27 04:13:25 EDT (Sun, 27 Apr 2008)
@@ -111,7 +111,11 @@
     }
     else
     {
- struct timespec rqtp = { 0 };
+ // g++ -Wextra warns on {} or {0}
+ struct timespec rqtp = { 0, 0 };
+
+ // POSIX says that timespec has tv_sec and tv_nsec
+ // But it doesn't guarantee order or placement
 
         rqtp.tv_sec = 0;
         rqtp.tv_nsec = 1000;

Modified: branches/doc/boost/enable_shared_from_this.hpp
==============================================================================
--- branches/doc/boost/enable_shared_from_this.hpp (original)
+++ branches/doc/boost/enable_shared_from_this.hpp 2008-04-27 04:13:25 EDT (Sun, 27 Apr 2008)
@@ -13,7 +13,6 @@
 // http://www.boost.org/libs/smart_ptr/enable_shared_from_this.html
 //
 
-#include <boost/weak_ptr.hpp>
 #include <boost/shared_ptr.hpp>
 #include <boost/assert.hpp>
 #include <boost/config.hpp>
@@ -21,40 +20,19 @@
 namespace boost
 {
 
-template<class T> class enable_shared_from_this
-{
-// dynamic cast to template type doesn't work in constructor, so we have
-// to use lazy initialization
- void init_internal_shared_once() const
- {
- if( !owned() && _internal_shared_this.get() == 0 )
- {
- T * p = dynamic_cast<T *>(const_cast<enable_shared_from_this*>(this));
- _internal_shared_this = shared_ptr<T>( p, detail::sp_deleter_wrapper() );
- BOOST_ASSERT(_internal_shared_this.get() == this);
- _internal_weak_this = _internal_shared_this;
- }
- }
-
- bool owned() const
- {
- return _owned;
- }
-
- typedef T _internal_element_type; // for bcc 5.5.1
- mutable shared_ptr<_internal_element_type> _internal_shared_this;
- mutable weak_ptr<_internal_element_type> _internal_weak_this;
- mutable bool _owned;
+template< class T > class enable_shared_from_this;
+template< class T, class Y > void sp_accept_owner( shared_ptr<Y> * ptr, enable_shared_from_this<T> const * pe );
+template< class T, class Y > void sp_accept_owner( shared_ptr<Y> * ptr, enable_shared_from_this<T> const * pe, void * /*pd*/ );
 
+template< class T > class enable_shared_from_this
+{
 protected:
 
- enable_shared_from_this():
- _owned(false)
+ enable_shared_from_this()
     {
     }
 
- enable_shared_from_this(enable_shared_from_this const &):
- _owned(false)
+ enable_shared_from_this(enable_shared_from_this const &)
     {
     }
 
@@ -69,71 +47,77 @@
 // make sure no dangling shared_ptr objects were created by the
 // user calling shared_from_this() but never passing ownership of the object
 // to a shared_ptr.
- BOOST_ASSERT(owned() || _internal_shared_this.use_count() <= 1);
+ BOOST_ASSERT( _shared_count.use_count() <= 1 );
     }
 
 public:
 
     shared_ptr<T> shared_from_this()
     {
- init_internal_shared_once();
- shared_ptr<T> p(_internal_weak_this);
- BOOST_ASSERT(p.get() == this);
- return p;
+ init_weak_once();
+ T * p = dynamic_cast<T *>( this );
+ return shared_ptr<T>( detail::shared_count( _weak_count ), p );
     }
 
     shared_ptr<T const> shared_from_this() const
     {
- init_internal_shared_once();
- shared_ptr<T const> p(_internal_weak_this);
- BOOST_ASSERT(p.get() == this);
- return p;
+ init_weak_once();
+ T const * p = dynamic_cast<T const *>( this );
+ return shared_ptr<T const>( detail::shared_count( _weak_count ), p );
+ }
+
+private:
+
+ mutable detail::weak_count _weak_count;
+ mutable detail::shared_count _shared_count;
+
+ void init_weak_once() const
+ {
+ if( _weak_count.empty() )
+ {
+ detail::shared_count( (void*)0, detail::sp_deleter_wrapper() ).swap( _shared_count );
+ _weak_count = _shared_count;
+ }
     }
 
     template<typename U>
- void _internal_accept_owner(shared_ptr<U> &owner) const
+ void sp_accept_owner( shared_ptr<U> & owner ) const
     {
- if( !_owned )
+ if( _weak_count.use_count() == 0 )
         {
- if( !_internal_shared_this )
- {
- T * p = dynamic_cast<T *>(const_cast<enable_shared_from_this*>(this));
- _internal_weak_this = shared_ptr<T>(owner, p);
- }else
- {
- BOOST_ASSERT(owner.unique()); // no weak_ptrs to owner should exist either, but there's no way to check that
- detail::sp_deleter_wrapper * pd = get_deleter<detail::sp_deleter_wrapper>(_internal_shared_this);
- BOOST_ASSERT( pd != 0 );
- pd->set_deleter(owner);
-
- owner.reset( _internal_shared_this, owner.get() );
- _internal_shared_this.reset();
- }
- _owned = true;
+ _weak_count = owner.get_shared_count();
+ }else if( !_shared_count.empty() )
+ {
+ BOOST_ASSERT( owner.unique() ); // no weak_ptrs to owner should exist either, but there's no way to check that
+ typedef detail::sp_deleter_wrapper D;
+ D * pd = static_cast<D *>( _shared_count.get_deleter( BOOST_SP_TYPEID(D) ) );
+ BOOST_ASSERT( pd != 0 );
+ pd->set_deleter( owner );
+ owner.reset( _shared_count, owner.get() );
+ detail::shared_count().swap( _shared_count );
         }
     }
+
+ template< class U, class Y > friend void sp_accept_owner( shared_ptr<Y> * ptr, enable_shared_from_this<U> const * pe );
+ template< class U, class Y > friend void sp_accept_owner( shared_ptr<Y> * ptr, enable_shared_from_this<U> const * pe, void * /*pd*/ );
 };
 
-template< class T, class Y > inline void sp_accept_owner( boost::shared_ptr<Y> * ptr, boost::enable_shared_from_this<T> const * pe )
+template< class T, class Y > inline void sp_accept_owner( shared_ptr<Y> * ptr, enable_shared_from_this<T> const * pe )
 {
     if( pe != 0 )
     {
- pe->_internal_accept_owner( *ptr );
+ pe->sp_accept_owner( *ptr );
     }
 }
 
-template< class T, class Y > inline void sp_accept_owner( boost::shared_ptr<Y> * ptr, boost::enable_shared_from_this<T> const * pe, void * /*pd*/ )
+template< class T, class Y > inline void sp_accept_owner( shared_ptr<Y> * ptr, enable_shared_from_this<T> const * pe, void * /*pd*/ )
 {
     if( pe != 0 )
     {
- pe->_internal_accept_owner( *ptr );
+ pe->sp_accept_owner( *ptr );
     }
 }
 
-template< class T, class Y > inline void sp_accept_owner( boost::shared_ptr<Y> * /*ptr*/, boost::enable_shared_from_this<T> const * /*pe*/, boost::detail::sp_deleter_wrapper * /*pd*/ )
-{
-}
-
 } // namespace boost
 
 #endif // #ifndef BOOST_ENABLE_SHARED_FROM_THIS_HPP_INCLUDED

Modified: branches/doc/boost/exception/enable_error_info.hpp
==============================================================================
--- branches/doc/boost/exception/enable_error_info.hpp (original)
+++ branches/doc/boost/exception/enable_error_info.hpp 2008-04-27 04:13:25 EDT (Sun, 27 Apr 2008)
@@ -25,6 +25,10 @@
                 T(x)
                 {
                 }
+
+ ~error_info_injector() throw()
+ {
+ }
             };
 
         struct large_size { char c[256]; };

Modified: branches/doc/boost/exception/info.hpp
==============================================================================
--- branches/doc/boost/exception/info.hpp (original)
+++ branches/doc/boost/exception/info.hpp 2008-04-27 04:13:25 EDT (Sun, 27 Apr 2008)
@@ -36,6 +36,12 @@
 
             virtual std::type_info const & tag_typeid() const = 0;
             virtual std::string value_as_string() const = 0;
+
+ protected:
+
+ ~error_info_base()
+ {
+ }
             };
         }
 

Modified: branches/doc/boost/exception_ptr.hpp
==============================================================================
--- branches/doc/boost/exception_ptr.hpp (original)
+++ branches/doc/boost/exception_ptr.hpp 2008-04-27 04:13:25 EDT (Sun, 27 Apr 2008)
@@ -30,6 +30,10 @@
             boost::exception(e)
             {
             }
+
+ ~unknown_exception() throw()
+ {
+ }
         };
 
     typedef intrusive_ptr<exception_detail::clone_base const> exception_ptr;
@@ -56,6 +60,10 @@
                 boost::exception(e2)
                 {
                 }
+
+ ~current_exception_std_exception_wrapper() throw()
+ {
+ }
             };
 
         template <class T>

Modified: branches/doc/boost/function_types/detail/pp_retag_default_cc/master.hpp
==============================================================================
--- branches/doc/boost/function_types/detail/pp_retag_default_cc/master.hpp (original)
+++ branches/doc/boost/function_types/detail/pp_retag_default_cc/master.hpp 2008-04-27 04:13:25 EDT (Sun, 27 Apr 2008)
@@ -30,8 +30,8 @@
 # include BOOST_PP_ASSIGN_SLOT(1)
 
     BOOST_STATIC_CONSTANT(bits_t, value = (
- ::boost::function_types::detail::bits<Tag>::value & BOOST_FT_default_cc
- | ::boost::function_types::detail::bits<RefTag>::value & BOOST_PP_SLOT(1)
+ (::boost::function_types::detail::bits<Tag>::value & BOOST_FT_default_cc)
+ | (::boost::function_types::detail::bits<RefTag>::value & BOOST_PP_SLOT(1))
     ));
   };
 

Modified: branches/doc/boost/function_types/detail/pp_retag_default_cc/preprocessed.hpp
==============================================================================
--- branches/doc/boost/function_types/detail/pp_retag_default_cc/preprocessed.hpp (original)
+++ branches/doc/boost/function_types/detail/pp_retag_default_cc/preprocessed.hpp 2008-04-27 04:13:25 EDT (Sun, 27 Apr 2008)
@@ -15,8 +15,8 @@
 template<class Tag, class RefTag> struct selector_bits
 {
 BOOST_STATIC_CONSTANT(bits_t, value = (
-::boost::function_types::detail::bits<Tag> ::value & 0x00008000
-| ::boost::function_types::detail::bits<RefTag> ::value & 802
+(::boost::function_types::detail::bits<Tag> ::value & 0x00008000)
+| (::boost::function_types::detail::bits<RefTag> ::value & 802)
 ));
 };
 template<bits_t SelectorBits> struct default_cc_tag;

Modified: branches/doc/boost/function_types/detail/pp_tags/master.hpp
==============================================================================
--- branches/doc/boost/function_types/detail/pp_tags/master.hpp (original)
+++ branches/doc/boost/function_types/detail/pp_tags/master.hpp 2008-04-27 04:13:25 EDT (Sun, 27 Apr 2008)
@@ -82,7 +82,7 @@
     );
 
     BOOST_STATIC_CONSTANT(bits_t, combined_bits =
- LHS_bits & ~RHS_mask | RHS_bits
+ (LHS_bits & ~RHS_mask) | RHS_bits
     );
 
     BOOST_STATIC_CONSTANT(bits_t, combined_mask =

Modified: branches/doc/boost/function_types/detail/pp_tags/preprocessed.hpp
==============================================================================
--- branches/doc/boost/function_types/detail/pp_tags/preprocessed.hpp (original)
+++ branches/doc/boost/function_types/detail/pp_tags/preprocessed.hpp 2008-04-27 04:13:25 EDT (Sun, 27 Apr 2008)
@@ -53,7 +53,7 @@
 RHS_bits == (LHS_bits & RHS_mask & (RHS_bits | ~0x000000ff))
 );
 BOOST_STATIC_CONSTANT(bits_t, combined_bits =
-LHS_bits & ~RHS_mask | RHS_bits
+(LHS_bits & ~RHS_mask) | RHS_bits
 );
 BOOST_STATIC_CONSTANT(bits_t, combined_mask =
 LHS_mask | RHS_mask

Modified: branches/doc/boost/fusion/adapted/array/detail/category_of_impl.hpp
==============================================================================
--- branches/doc/boost/fusion/adapted/array/detail/category_of_impl.hpp (original)
+++ branches/doc/boost/fusion/adapted/array/detail/category_of_impl.hpp 2008-04-27 04:13:25 EDT (Sun, 27 Apr 2008)
@@ -8,7 +8,7 @@
 #if !defined(BOOST_FUSION_CATEGORY_OF_IMPL_27122005_1044)
 #define BOOST_FUSION_CATEGORY_OF_IMPL_27122005_1044
 
-#include <utility>
+#include <boost/config/no_tr1/utility.hpp>
 
 namespace boost { namespace fusion {
 

Modified: branches/doc/boost/fusion/adapted/array/tag_of.hpp
==============================================================================
--- branches/doc/boost/fusion/adapted/array/tag_of.hpp (original)
+++ branches/doc/boost/fusion/adapted/array/tag_of.hpp 2008-04-27 04:13:25 EDT (Sun, 27 Apr 2008)
@@ -25,7 +25,7 @@
     namespace traits
     {
         template<typename T, std::size_t N>
-#if defined(BOOST_PARTIAL_SPECIALIZATION_EXPLICT_ARGS)
+#if defined(BOOST_NO_PARTIAL_SPECIALIZATION_IMPLICIT_DEFAULT_ARGS)
         struct tag_of<boost::array<T,N>, void >
 #else
         struct tag_of<boost::array<T,N> >

Modified: branches/doc/boost/fusion/adapted/boost_tuple/tag_of.hpp
==============================================================================
--- branches/doc/boost/fusion/adapted/boost_tuple/tag_of.hpp (original)
+++ branches/doc/boost/fusion/adapted/boost_tuple/tag_of.hpp 2008-04-27 04:13:25 EDT (Sun, 27 Apr 2008)
@@ -33,7 +33,7 @@
             class T0, class T1, class T2, class T3, class T4,
             class T5, class T6, class T7, class T8, class T9
>
-#if defined(BOOST_PARTIAL_SPECIALIZATION_EXPLICT_ARGS)
+#if defined(BOOST_NO_PARTIAL_SPECIALIZATION_IMPLICIT_DEFAULT_ARGS)
         struct tag_of<tuples::tuple<T0, T1, T2, T3, T4, T5, T6, T7, T8, T9>, void >
 #else
         struct tag_of<tuples::tuple<T0, T1, T2, T3, T4, T5, T6, T7, T8, T9> >
@@ -43,7 +43,7 @@
         };
 
         template <class Head, class Tail>
-#if defined(BOOST_PARTIAL_SPECIALIZATION_EXPLICT_ARGS)
+#if defined(BOOST_NO_PARTIAL_SPECIALIZATION_IMPLICIT_DEFAULT_ARGS)
         struct tag_of<tuples::cons<Head, Tail>, void >
 #else
         struct tag_of<tuples::cons<Head, Tail> >

Modified: branches/doc/boost/fusion/adapted/std_pair.hpp
==============================================================================
--- branches/doc/boost/fusion/adapted/std_pair.hpp (original)
+++ branches/doc/boost/fusion/adapted/std_pair.hpp 2008-04-27 04:13:25 EDT (Sun, 27 Apr 2008)
@@ -11,7 +11,7 @@
 #include <boost/fusion/support/tag_of_fwd.hpp>
 #include <boost/fusion/adapted/struct.hpp>
 #include <boost/mpl/int.hpp>
-#include <utility>
+#include <boost/config/no_tr1/utility.hpp>
 
 namespace boost { namespace fusion
 {
@@ -20,7 +20,7 @@
     namespace traits
     {
         template <typename T1, typename T2>
-#if defined(BOOST_PARTIAL_SPECIALIZATION_EXPLICT_ARGS)
+#if defined(BOOST_NO_PARTIAL_SPECIALIZATION_IMPLICIT_DEFAULT_ARGS)
         struct tag_of<std::pair<T1, T2>, void >
 #else
         struct tag_of<std::pair<T1, T2> >

Modified: branches/doc/boost/fusion/adapted/std_pair/detail/category_of_impl.hpp
==============================================================================
--- branches/doc/boost/fusion/adapted/std_pair/detail/category_of_impl.hpp (original)
+++ branches/doc/boost/fusion/adapted/std_pair/detail/category_of_impl.hpp 2008-04-27 04:13:25 EDT (Sun, 27 Apr 2008)
@@ -8,7 +8,7 @@
 #if !defined(BOOST_FUSION_CATEGORY_OF_IMPL_24122005_1731)
 #define BOOST_FUSION_CATEGORY_OF_IMPL_24122005_1731
 
-#include <utility>
+#include <boost/config/no_tr1/utility.hpp>
 
 namespace boost { namespace fusion {
 

Modified: branches/doc/boost/fusion/adapted/std_pair/std_pair_iterator.hpp
==============================================================================
--- branches/doc/boost/fusion/adapted/std_pair/std_pair_iterator.hpp (original)
+++ branches/doc/boost/fusion/adapted/std_pair/std_pair_iterator.hpp 2008-04-27 04:13:25 EDT (Sun, 27 Apr 2008)
@@ -14,7 +14,7 @@
 #include <boost/mpl/if.hpp>
 #include <boost/mpl/int.hpp>
 #include <boost/mpl/minus.hpp>
-#include <utility>
+#include <boost/config/no_tr1/utility.hpp>
 
 namespace boost { namespace fusion
 {

Modified: branches/doc/boost/fusion/adapted/std_pair/tag_of.hpp
==============================================================================
--- branches/doc/boost/fusion/adapted/std_pair/tag_of.hpp (original)
+++ branches/doc/boost/fusion/adapted/std_pair/tag_of.hpp 2008-04-27 04:13:25 EDT (Sun, 27 Apr 2008)
@@ -10,7 +10,7 @@
 
 #include <boost/fusion/support/tag_of_fwd.hpp>
 
-#include <utility>
+#include <boost/config/no_tr1/utility.hpp>
 
 namespace boost { namespace fusion {
 

Modified: branches/doc/boost/fusion/adapted/struct/adapt_assoc_struct.hpp
==============================================================================
--- branches/doc/boost/fusion/adapted/struct/adapt_assoc_struct.hpp (original)
+++ branches/doc/boost/fusion/adapted/struct/adapt_assoc_struct.hpp 2008-04-27 04:13:25 EDT (Sun, 27 Apr 2008)
@@ -31,7 +31,7 @@
 #include <boost/preprocessor/repetition/enum_params.hpp>
 #include <boost/preprocessor/cat.hpp>
 #include <boost/mpl/int.hpp>
-#include <utility>
+#include <boost/config/no_tr1/utility.hpp>
 
 namespace boost { namespace fusion { namespace extension {
     template<typename Struct, typename Key>

Modified: branches/doc/boost/fusion/adapted/struct/adapt_struct.hpp
==============================================================================
--- branches/doc/boost/fusion/adapted/struct/adapt_struct.hpp (original)
+++ branches/doc/boost/fusion/adapted/struct/adapt_struct.hpp 2008-04-27 04:13:25 EDT (Sun, 27 Apr 2008)
@@ -27,7 +27,7 @@
 #include <boost/preprocessor/repetition/enum_params.hpp>
 #include <boost/preprocessor/cat.hpp>
 #include <boost/mpl/int.hpp>
-#include <utility>
+#include <boost/config/no_tr1/utility.hpp>
 
 #define BOOST_FUSION_ADAPT_STRUCT(name, bseq) \
     BOOST_FUSION_ADAPT_STRUCT_I( \

Modified: branches/doc/boost/fusion/adapted/struct/detail/category_of_impl.hpp
==============================================================================
--- branches/doc/boost/fusion/adapted/struct/detail/category_of_impl.hpp (original)
+++ branches/doc/boost/fusion/adapted/struct/detail/category_of_impl.hpp 2008-04-27 04:13:25 EDT (Sun, 27 Apr 2008)
@@ -8,7 +8,7 @@
 #if !defined(BOOST_FUSION_CATEGORY_OF_IMPL_24122005_1731)
 #define BOOST_FUSION_CATEGORY_OF_IMPL_24122005_1731
 
-#include <utility>
+#include <boost/config/no_tr1/utility.hpp>
 
 namespace boost { namespace fusion
 {

Modified: branches/doc/boost/fusion/adapted/struct/struct_iterator.hpp
==============================================================================
--- branches/doc/boost/fusion/adapted/struct/struct_iterator.hpp (original)
+++ branches/doc/boost/fusion/adapted/struct/struct_iterator.hpp 2008-04-27 04:13:25 EDT (Sun, 27 Apr 2008)
@@ -17,7 +17,7 @@
 #include <boost/mpl/if.hpp>
 #include <boost/mpl/int.hpp>
 #include <boost/mpl/minus.hpp>
-#include <utility>
+#include <boost/config/no_tr1/utility.hpp>
 
 namespace boost { namespace fusion
 {

Modified: branches/doc/boost/fusion/algorithm/transformation/transform.hpp
==============================================================================
--- branches/doc/boost/fusion/algorithm/transformation/transform.hpp (original)
+++ branches/doc/boost/fusion/algorithm/transformation/transform.hpp 2008-04-27 04:13:25 EDT (Sun, 27 Apr 2008)
@@ -22,7 +22,7 @@
         };
 
         template <typename Sequence, typename F>
-#if defined(BOOST_PARTIAL_SPECIALIZATION_EXPLICT_ARGS)
+#if defined(BOOST_NO_PARTIAL_SPECIALIZATION_IMPLICIT_DEFAULT_ARGS)
         struct transform<Sequence, F, void_>
 #else
         struct transform<Sequence, F>

Modified: branches/doc/boost/fusion/algorithm/transformation/zip.hpp
==============================================================================
--- branches/doc/boost/fusion/algorithm/transformation/zip.hpp (original)
+++ branches/doc/boost/fusion/algorithm/transformation/zip.hpp 2008-04-27 04:13:25 EDT (Sun, 27 Apr 2008)
@@ -54,7 +54,7 @@
     namespace result_of
     {
         template< BOOST_PP_ENUM_PARAMS(ZIP_ITERATION, typename T) >
-#if defined(BOOST_PARTIAL_SPECIALIZATION_EXPLICT_ARGS)
+#if defined(BOOST_NO_PARTIAL_SPECIALIZATION_IMPLICIT_DEFAULT_ARGS)
         #define TEXT(z, n, text) , text
         struct zip< BOOST_PP_ENUM_PARAMS(ZIP_ITERATION, T) BOOST_PP_REPEAT_FROM_TO(BOOST_PP_DEC(ZIP_ITERATION), FUSION_MAX_ZIP_SEQUENCES, TEXT, void_) >
         #undef TEXT

Modified: branches/doc/boost/fusion/container/generation/deque_tie.hpp
==============================================================================
--- branches/doc/boost/fusion/container/generation/deque_tie.hpp (original)
+++ branches/doc/boost/fusion/container/generation/deque_tie.hpp 2008-04-27 04:13:25 EDT (Sun, 27 Apr 2008)
@@ -54,7 +54,7 @@
     namespace result_of
     {
         template <BOOST_PP_ENUM_PARAMS(N, typename T)>
-#if defined(BOOST_PARTIAL_SPECIALIZATION_EXPLICT_ARGS)
+#if defined(BOOST_NO_PARTIAL_SPECIALIZATION_IMPLICIT_DEFAULT_ARGS)
         #define TEXT(z, n, text) , text
         struct deque_tie< BOOST_PP_ENUM_PARAMS(N, T) BOOST_PP_REPEAT_FROM_TO(BOOST_PP_DEC(N), FUSION_MAX_DEQUE_SIZE, TEXT, void_) >
         #undef TEXT

Modified: branches/doc/boost/fusion/container/generation/list_tie.hpp
==============================================================================
--- branches/doc/boost/fusion/container/generation/list_tie.hpp (original)
+++ branches/doc/boost/fusion/container/generation/list_tie.hpp 2008-04-27 04:13:25 EDT (Sun, 27 Apr 2008)
@@ -54,7 +54,7 @@
     namespace result_of
     {
         template <BOOST_PP_ENUM_PARAMS(N, typename T)>
-#if defined(BOOST_PARTIAL_SPECIALIZATION_EXPLICT_ARGS)
+#if defined(BOOST_NO_PARTIAL_SPECIALIZATION_IMPLICIT_DEFAULT_ARGS)
         #define TEXT(z, n, text) , text
         struct list_tie< BOOST_PP_ENUM_PARAMS(N, T) BOOST_PP_REPEAT_FROM_TO(BOOST_PP_DEC(N), FUSION_MAX_LIST_SIZE, TEXT, void_) >
         #undef TEXT

Modified: branches/doc/boost/fusion/container/generation/make_deque.hpp
==============================================================================
--- branches/doc/boost/fusion/container/generation/make_deque.hpp (original)
+++ branches/doc/boost/fusion/container/generation/make_deque.hpp 2008-04-27 04:13:25 EDT (Sun, 27 Apr 2008)
@@ -73,7 +73,7 @@
     namespace result_of
     {
         template <BOOST_PP_ENUM_PARAMS(N, typename T)>
-#if defined(BOOST_PARTIAL_SPECIALIZATION_EXPLICT_ARGS)
+#if defined(BOOST_NO_PARTIAL_SPECIALIZATION_IMPLICIT_DEFAULT_ARGS)
         #define TEXT(z, n, text) , text
         struct make_deque< BOOST_PP_ENUM_PARAMS(N, T) BOOST_PP_REPEAT_FROM_TO(BOOST_PP_DEC(N), FUSION_MAX_DEQUE_SIZE, TEXT, void_) >
         #undef TEXT

Modified: branches/doc/boost/fusion/container/generation/make_list.hpp
==============================================================================
--- branches/doc/boost/fusion/container/generation/make_list.hpp (original)
+++ branches/doc/boost/fusion/container/generation/make_list.hpp 2008-04-27 04:13:25 EDT (Sun, 27 Apr 2008)
@@ -66,7 +66,7 @@
     namespace result_of
     {
         template <BOOST_PP_ENUM_PARAMS(N, typename T)>
-#if defined(BOOST_PARTIAL_SPECIALIZATION_EXPLICT_ARGS)
+#if defined(BOOST_NO_PARTIAL_SPECIALIZATION_IMPLICIT_DEFAULT_ARGS)
         #define TEXT(z, n, text) , text
         struct make_list< BOOST_PP_ENUM_PARAMS(N, T) BOOST_PP_REPEAT_FROM_TO(BOOST_PP_DEC(N), FUSION_MAX_LIST_SIZE, TEXT, void_) >
         #undef TEXT

Modified: branches/doc/boost/fusion/container/generation/make_map.hpp
==============================================================================
--- branches/doc/boost/fusion/container/generation/make_map.hpp (original)
+++ branches/doc/boost/fusion/container/generation/make_map.hpp 2008-04-27 04:13:25 EDT (Sun, 27 Apr 2008)
@@ -78,7 +78,7 @@
             BOOST_PP_ENUM_PARAMS(N, typename K)
           , BOOST_PP_ENUM_PARAMS(N, typename D)
>
-#if defined(BOOST_PARTIAL_SPECIALIZATION_EXPLICT_ARGS)
+#if defined(BOOST_NO_PARTIAL_SPECIALIZATION_IMPLICIT_DEFAULT_ARGS)
          #define TEXT(z, n, text) , text
          struct make_map<BOOST_PP_ENUM_PARAMS(N, K), BOOST_PP_ENUM_PARAMS(N, D) BOOST_PP_REPEAT_FROM_TO(N, FUSION_MAX_VECTOR_SIZE, TEXT, void_) BOOST_PP_REPEAT_FROM_TO(BOOST_PP_DEC(N), FUSION_MAX_VECTOR_SIZE, TEXT, void_)>
          #undef TEXT

Modified: branches/doc/boost/fusion/container/generation/make_set.hpp
==============================================================================
--- branches/doc/boost/fusion/container/generation/make_set.hpp (original)
+++ branches/doc/boost/fusion/container/generation/make_set.hpp 2008-04-27 04:13:25 EDT (Sun, 27 Apr 2008)
@@ -68,7 +68,7 @@
     namespace result_of
     {
         template <BOOST_PP_ENUM_PARAMS(N, typename T)>
-#if defined(BOOST_PARTIAL_SPECIALIZATION_EXPLICT_ARGS)
+#if defined(BOOST_NO_PARTIAL_SPECIALIZATION_IMPLICIT_DEFAULT_ARGS)
         #define TEXT(z, n, text) , text
         struct make_set< BOOST_PP_ENUM_PARAMS(N, T) BOOST_PP_REPEAT_FROM_TO(BOOST_PP_DEC(N), FUSION_MAX_SET_SIZE, TEXT, void_) >
         #undef TEXT

Modified: branches/doc/boost/fusion/container/generation/make_vector.hpp
==============================================================================
--- branches/doc/boost/fusion/container/generation/make_vector.hpp (original)
+++ branches/doc/boost/fusion/container/generation/make_vector.hpp 2008-04-27 04:13:25 EDT (Sun, 27 Apr 2008)
@@ -66,7 +66,7 @@
     namespace result_of
     {
         template <BOOST_PP_ENUM_PARAMS(N, typename T)>
-#if defined(BOOST_PARTIAL_SPECIALIZATION_EXPLICT_ARGS)
+#if defined(BOOST_NO_PARTIAL_SPECIALIZATION_IMPLICIT_DEFAULT_ARGS)
         #define TEXT(z, n, text) , text
         struct make_vector< BOOST_PP_ENUM_PARAMS(N, T) BOOST_PP_REPEAT_FROM_TO(BOOST_PP_DEC(N), FUSION_MAX_VECTOR_SIZE, TEXT, void_) >
         #undef TEXT

Modified: branches/doc/boost/fusion/container/generation/map_tie.hpp
==============================================================================
--- branches/doc/boost/fusion/container/generation/map_tie.hpp (original)
+++ branches/doc/boost/fusion/container/generation/map_tie.hpp 2008-04-27 04:13:25 EDT (Sun, 27 Apr 2008)
@@ -81,7 +81,7 @@
             BOOST_PP_ENUM_PARAMS(N, typename K)
           , BOOST_PP_ENUM_PARAMS(N, typename D)
>
-#if defined(BOOST_PARTIAL_SPECIALIZATION_EXPLICT_ARGS)
+#if defined(BOOST_NO_PARTIAL_SPECIALIZATION_IMPLICIT_DEFAULT_ARGS)
         #define TEXT(z, n, text) , text
 
         struct map_tie<BOOST_PP_ENUM_PARAMS(N, K), BOOST_PP_ENUM_PARAMS(N, D) BOOST_PP_REPEAT_FROM_TO(N, FUSION_MAX_MAP_SIZE, TEXT, void_) BOOST_PP_REPEAT_FROM_TO(BOOST_PP_DEC(N), FUSION_MAX_MAP_SIZE, TEXT, void_)>

Modified: branches/doc/boost/fusion/container/generation/vector_tie.hpp
==============================================================================
--- branches/doc/boost/fusion/container/generation/vector_tie.hpp (original)
+++ branches/doc/boost/fusion/container/generation/vector_tie.hpp 2008-04-27 04:13:25 EDT (Sun, 27 Apr 2008)
@@ -53,7 +53,7 @@
     namespace result_of
     {
         template <BOOST_PP_ENUM_PARAMS(N, typename T)>
-#if defined(BOOST_PARTIAL_SPECIALIZATION_EXPLICT_ARGS)
+#if defined(BOOST_NO_PARTIAL_SPECIALIZATION_IMPLICIT_DEFAULT_ARGS)
         #define TEXT(z, n, text) , text
         struct vector_tie< BOOST_PP_ENUM_PARAMS(N, T) BOOST_PP_REPEAT_FROM_TO(BOOST_PP_DEC(N), FUSION_MAX_VECTOR_SIZE, TEXT, void_) >
         #undef TEXT

Modified: branches/doc/boost/fusion/container/list/detail/end_impl.hpp
==============================================================================
--- branches/doc/boost/fusion/container/list/detail/end_impl.hpp (original)
+++ branches/doc/boost/fusion/container/list/detail/end_impl.hpp 2008-04-27 04:13:25 EDT (Sun, 27 Apr 2008)
@@ -39,7 +39,7 @@
                 type;
     
                 static type
- call(Sequence& t)
+ call(Sequence&)
                 {
                     return type();
                 }

Modified: branches/doc/boost/fusion/support/tag_of.hpp
==============================================================================
--- branches/doc/boost/fusion/support/tag_of.hpp (original)
+++ branches/doc/boost/fusion/support/tag_of.hpp 2008-04-27 04:13:25 EDT (Sun, 27 Apr 2008)
@@ -16,7 +16,7 @@
 #include <boost/mpl/assert.hpp>
 #include <boost/mpl/bool.hpp>
 #include <boost/mpl/if.hpp>
-#include <utility>
+#include <boost/config/no_tr1/utility.hpp>
 
 namespace boost
 {

Modified: branches/doc/boost/fusion/view/transform_view/transform_view.hpp
==============================================================================
--- branches/doc/boost/fusion/view/transform_view/transform_view.hpp (original)
+++ branches/doc/boost/fusion/view/transform_view/transform_view.hpp 2008-04-27 04:13:25 EDT (Sun, 27 Apr 2008)
@@ -73,7 +73,7 @@
 
     // Unary Version
     template <typename Sequence, typename F>
-#if defined(BOOST_PARTIAL_SPECIALIZATION_EXPLICT_ARGS)
+#if defined(BOOST_NO_PARTIAL_SPECIALIZATION_IMPLICIT_DEFAULT_ARGS)
     struct transform_view<Sequence, F, void_> : sequence_base<transform_view<Sequence, F, void_> >
 #else
     struct transform_view<Sequence, F> : sequence_base<transform_view<Sequence, F> >

Modified: branches/doc/boost/math/concepts/real_concept.hpp
==============================================================================
--- branches/doc/boost/math/concepts/real_concept.hpp (original)
+++ branches/doc/boost/math/concepts/real_concept.hpp 2008-04-27 04:13:25 EDT (Sun, 27 Apr 2008)
@@ -237,6 +237,47 @@
 inline real_concept tanh(real_concept a)
 { return std::tanh(a.value()); }
 
+//
+// Conversion and truncation routines:
+//
+template <class Policy>
+inline int iround(const concepts::real_concept& v, const Policy& pol)
+{ return boost::math::iround(v.value(), pol); }
+inline int iround(const concepts::real_concept& v)
+{ return boost::math::iround(v.value(), policies::policy<>()); }
+template <class Policy>
+inline long lround(const concepts::real_concept& v, const Policy& pol)
+{ return boost::math::lround(v.value(), pol); }
+inline long lround(const concepts::real_concept& v)
+{ return boost::math::lround(v.value(), policies::policy<>()); }
+
+#ifdef BOOST_HAS_LONG_LONG
+template <class Policy>
+inline long long llround(const concepts::real_concept& v, const Policy& pol)
+{ return boost::math::llround(v.value(), pol); }
+inline long long llround(const concepts::real_concept& v)
+{ return boost::math::llround(v.value(), policies::policy<>()); }
+#endif
+
+template <class Policy>
+inline int itrunc(const concepts::real_concept& v, const Policy& pol)
+{ return boost::math::itrunc(v.value(), pol); }
+inline int itrunc(const concepts::real_concept& v)
+{ return boost::math::itrunc(v.value(), policies::policy<>()); }
+template <class Policy>
+inline long ltrunc(const concepts::real_concept& v, const Policy& pol)
+{ return boost::math::ltrunc(v.value(), pol); }
+inline long ltrunc(const concepts::real_concept& v)
+{ return boost::math::ltrunc(v.value(), policies::policy<>()); }
+
+#ifdef BOOST_HAS_LONG_LONG
+template <class Policy>
+inline long long lltrunc(const concepts::real_concept& v, const Policy& pol)
+{ return boost::math::lltrunc(v.value(), pol); }
+inline long long lltrunc(const concepts::real_concept& v)
+{ return boost::math::lltrunc(v.value(), policies::policy<>()); }
+#endif
+
 // Streaming:
 template <class charT, class traits>
 inline std::basic_ostream<charT, traits>& operator<<(std::basic_ostream<charT, traits>& os, const real_concept& a)
@@ -324,77 +365,6 @@
 
 } // namespace tools
 
-//
-// Conversion and truncation routines:
-//
-template <class Policy>
-inline int iround(const concepts::real_concept& v, const Policy& pol)
-{
- return iround(v.value(), pol);
-}
-inline int iround(const concepts::real_concept& v)
-{
- return iround(v.value(), policies::policy<>());
-}
-
-template <class Policy>
-inline long lround(const concepts::real_concept& v, const Policy& pol)
-{
- return lround(v.value(), pol);
-}
-inline long lround(const concepts::real_concept& v)
-{
- return lround(v.value(), policies::policy<>());
-}
-
-#ifdef BOOST_HAS_LONG_LONG
-
-template <class Policy>
-inline long long llround(const concepts::real_concept& v, const Policy& pol)
-{
- return llround(v.value(), pol);
-}
-inline long long llround(const concepts::real_concept& v)
-{
- return llround(v.value(), policies::policy<>());
-}
-
-#endif
-
-template <class Policy>
-inline int itrunc(const concepts::real_concept& v, const Policy& pol)
-{
- return itrunc(v.value(), pol);
-}
-inline int itrunc(const concepts::real_concept& v)
-{
- return itrunc(v.value(), policies::policy<>());
-}
-
-template <class Policy>
-inline long ltrunc(const concepts::real_concept& v, const Policy& pol)
-{
- return ltrunc(v.value(), pol);
-}
-inline long ltrunc(const concepts::real_concept& v)
-{
- return ltrunc(v.value(), policies::policy<>());
-}
-
-#ifdef BOOST_HAS_LONG_LONG
-
-template <class Policy>
-inline long long lltrunc(const concepts::real_concept& v, const Policy& pol)
-{
- return lltrunc(v.value(), pol);
-}
-inline long long lltrunc(const concepts::real_concept& v)
-{
- return lltrunc(v.value(), policies::policy<>());
-}
-
-#endif
-
 #if defined(__SGI_STL_PORT)
 //
 // We shouldn't really need these type casts any more, but there are some
@@ -446,6 +416,16 @@
 
 #endif
 
+#if BOOST_WORKAROUND(BOOST_MSVC, <= 1310)
+//
+// For some strange reason ADL sometimes fails to find the
+// correct overloads, unless we bring these declarations into scope:
+//
+using concepts::itrunc;
+using concepts::iround;
+
+#endif
+
 } // namespace math
 } // namespace boost
 

Modified: branches/doc/boost/math/concepts/std_real_concept.hpp
==============================================================================
--- branches/doc/boost/math/concepts/std_real_concept.hpp (original)
+++ branches/doc/boost/math/concepts/std_real_concept.hpp 2008-04-27 04:13:25 EDT (Sun, 27 Apr 2008)
@@ -223,6 +223,77 @@
 
 namespace boost{ namespace math{ namespace concepts{
 
+//
+// Conversion and truncation routines:
+//
+template <class Policy>
+inline int iround(const concepts::std_real_concept& v, const Policy& pol)
+{
+ return boost::math::iround(v.value(), pol);
+}
+inline int iround(const concepts::std_real_concept& v)
+{
+ return boost::math::iround(v.value(), policies::policy<>());
+}
+
+template <class Policy>
+inline long lround(const concepts::std_real_concept& v, const Policy& pol)
+{
+ return boost::math::lround(v.value(), pol);
+}
+inline long lround(const concepts::std_real_concept& v)
+{
+ return boost::math::lround(v.value(), policies::policy<>());
+}
+
+#ifdef BOOST_HAS_LONG_LONG
+
+template <class Policy>
+inline long long llround(const concepts::std_real_concept& v, const Policy& pol)
+{
+ return boost::math::llround(v.value(), pol);
+}
+inline long long llround(const concepts::std_real_concept& v)
+{
+ return boost::math::llround(v.value(), policies::policy<>());
+}
+
+#endif
+
+template <class Policy>
+inline int itrunc(const concepts::std_real_concept& v, const Policy& pol)
+{
+ return boost::math::itrunc(v.value(), pol);
+}
+inline int itrunc(const concepts::std_real_concept& v)
+{
+ return boost::math::itrunc(v.value(), policies::policy<>());
+}
+
+template <class Policy>
+inline long ltrunc(const concepts::std_real_concept& v, const Policy& pol)
+{
+ return boost::math::ltrunc(v.value(), pol);
+}
+inline long ltrunc(const concepts::std_real_concept& v)
+{
+ return boost::math::ltrunc(v.value(), policies::policy<>());
+}
+
+#ifdef BOOST_HAS_LONG_LONG
+
+template <class Policy>
+inline long long lltrunc(const concepts::std_real_concept& v, const Policy& pol)
+{
+ return boost::math::lltrunc(v.value(), pol);
+}
+inline long long lltrunc(const concepts::std_real_concept& v)
+{
+ return boost::math::lltrunc(v.value(), policies::policy<>());
+}
+
+#endif
+
 // Streaming:
 template <class charT, class traits>
 inline std::basic_ostream<charT, traits>& operator<<(std::basic_ostream<charT, traits>& os, const std_real_concept& a)
@@ -282,75 +353,13 @@
 
 } // namespace tools
 
-//
-// Conversion and truncation routines:
-//
-template <class Policy>
-inline int iround(const concepts::std_real_concept& v, const Policy& pol)
-{
- return iround(v.value(), pol);
-}
-inline int iround(const concepts::std_real_concept& v)
-{
- return iround(v.value(), policies::policy<>());
-}
-
-template <class Policy>
-inline long lround(const concepts::std_real_concept& v, const Policy& pol)
-{
- return lround(v.value(), pol);
-}
-inline long lround(const concepts::std_real_concept& v)
-{
- return lround(v.value(), policies::policy<>());
-}
-
-#ifdef BOOST_HAS_LONG_LONG
-
-template <class Policy>
-inline long long llround(const concepts::std_real_concept& v, const Policy& pol)
-{
- return llround(v.value(), pol);
-}
-inline long long llround(const concepts::std_real_concept& v)
-{
- return llround(v.value(), policies::policy<>());
-}
-
-#endif
-
-template <class Policy>
-inline int itrunc(const concepts::std_real_concept& v, const Policy& pol)
-{
- return itrunc(v.value(), pol);
-}
-inline int itrunc(const concepts::std_real_concept& v)
-{
- return itrunc(v.value(), policies::policy<>());
-}
-
-template <class Policy>
-inline long ltrunc(const concepts::std_real_concept& v, const Policy& pol)
-{
- return ltrunc(v.value(), pol);
-}
-inline long ltrunc(const concepts::std_real_concept& v)
-{
- return ltrunc(v.value(), policies::policy<>());
-}
-
-#ifdef BOOST_HAS_LONG_LONG
-
-template <class Policy>
-inline long long lltrunc(const concepts::std_real_concept& v, const Policy& pol)
-{
- return lltrunc(v.value(), pol);
-}
-inline long long lltrunc(const concepts::std_real_concept& v)
-{
- return lltrunc(v.value(), policies::policy<>());
-}
-
+#if BOOST_WORKAROUND(BOOST_MSVC, <= 1310)
+using concepts::itrunc;
+using concepts::ltrunc;
+using concepts::lltrunc;
+using concepts::iround;
+using concepts::lround;
+using concepts::llround;
 #endif
 
 } // namespace math

Modified: branches/doc/boost/math/special_functions/detail/t_distribution_inv.hpp
==============================================================================
--- branches/doc/boost/math/special_functions/detail/t_distribution_inv.hpp (original)
+++ branches/doc/boost/math/special_functions/detail/t_distribution_inv.hpp 2008-04-27 04:13:25 EDT (Sun, 27 Apr 2008)
@@ -13,6 +13,7 @@
 
 #include <boost/math/special_functions/cbrt.hpp>
 #include <boost/math/special_functions/round.hpp>
+#include <boost/math/special_functions/trunc.hpp>
 
 namespace boost{ namespace math{ namespace detail{
 

Modified: branches/doc/boost/math/special_functions/math_fwd.hpp
==============================================================================
--- branches/doc/boost/math/special_functions/math_fwd.hpp (original)
+++ branches/doc/boost/math/special_functions/math_fwd.hpp 2008-04-27 04:13:25 EDT (Sun, 27 Apr 2008)
@@ -23,6 +23,7 @@
 #pragma once
 #endif
 
+#include <boost/math/special_functions/detail/round_fwd.hpp>
 #include <boost/math/tools/promotion.hpp> // for argument promotion.
 #include <boost/math/policies/policy.hpp>
 #include <boost/mpl/comparison.hpp>
@@ -656,20 +657,6 @@
    template <class T>
    typename tools::promote_args<T>::type zeta(T s);
 
- template <class T, class Policy>
- T trunc(const T& v, const Policy& pol);
- template <class T>
- T trunc(const T& v);
- template <class T, class Policy>
- int itrunc(const T& v, const Policy& pol);
- template <class T>
- int itrunc(const T& v);
- template <class T, class Policy>
- long ltrunc(const T& v, const Policy& pol);
- template <class T>
- long ltrunc(const T& v);
-
-
     } // namespace math
 } // namespace boost
 
@@ -677,13 +664,13 @@
 #define BOOST_MATH_DETAIL_LL_FUNC(Policy)\
    \
    template <class T>\
- inline T modf(const T& v, long long* ipart){ return boost::math::modf(v, ipart, Policy()); }\
+ inline T modf(const T& v, long long* ipart){ using boost::math::modf; return modf(v, ipart, Policy()); }\
    \
    template <class T>\
- inline long long lltrunc(const T& v){ return boost::math::lltrunc(v, Policy()); }\
+ inline long long lltrunc(const T& v){ using boost::math::lltrunc; return lltrunc(v, Policy()); }\
    \
    template <class T>\
- inline long long llround(const T& v){ return boost::math::llround(v, Policy()); }\
+ inline long long llround(const T& v){ using boost::math::llround; return llround(v, Policy()); }\
 
 #else
 #define BOOST_MATH_DETAIL_LL_FUNC(Policy)
@@ -988,31 +975,31 @@
    inline typename boost::math::tools::promote_args<T>::type zeta(T s){ return boost::math::zeta(s, Policy()); }\
    \
    template <class T>\
- inline T round(const T& v){ return boost::math::round(v, Policy()); }\
+ inline T round(const T& v){ using boost::math::round; return round(v, Policy()); }\
    \
    template <class T>\
- inline int iround(const T& v){ return boost::math::iround(v, Policy()); }\
+ inline int iround(const T& v){ using boost::math::iround; return iround(v, Policy()); }\
    \
    template <class T>\
- inline long lround(const T& v){ return boost::math::lround(v, Policy()); }\
+ inline long lround(const T& v){ using boost::math::lround; return lround(v, Policy()); }\
    \
    template <class T>\
- inline T trunc(const T& v){ return boost::math::trunc(v, Policy()); }\
+ inline T trunc(const T& v){ using boost::math::trunc; return trunc(v, Policy()); }\
    \
    template <class T>\
- inline int itrunc(const T& v){ return boost::math::itrunc(v, Policy()); }\
+ inline int itrunc(const T& v){ using boost::math::itrunc; return itrunc(v, Policy()); }\
    \
    template <class T>\
- inline long ltrunc(const T& v){ return boost::math::ltrunc(v, Policy()); }\
+ inline long ltrunc(const T& v){ using boost::math::ltrunc; return ltrunc(v, Policy()); }\
    \
    template <class T>\
- inline T modf(const T& v, T* ipart){ return boost::math::modf(v, ipart, Policy()); }\
+ inline T modf(const T& v, T* ipart){ using boost::math::modf; return modf(v, ipart, Policy()); }\
    \
    template <class T>\
- inline T modf(const T& v, int* ipart){ return boost::math::modf(v, ipart, Policy()); }\
+ inline T modf(const T& v, int* ipart){ using boost::math::modf; return modf(v, ipart, Policy()); }\
    \
    template <class T>\
- inline T modf(const T& v, long* ipart){ return boost::math::modf(v, ipart, Policy()); }\
+ inline T modf(const T& v, long* ipart){ using boost::math::modf; return modf(v, ipart, Policy()); }\
    \
    template <int N, class T>\
    inline typename boost::math::tools::promote_args<T>::type pow(T v){ return boost::math::pow<N>(v, Policy()); }\

Modified: branches/doc/boost/math/tools/config.hpp
==============================================================================
--- branches/doc/boost/math/tools/config.hpp (original)
+++ branches/doc/boost/math/tools/config.hpp 2008-04-27 04:13:25 EDT (Sun, 27 Apr 2008)
@@ -21,6 +21,7 @@
 #endif
 
 #include <boost/math/tools/user.hpp>
+#include <boost/math/special_functions/detail/round_fwd.hpp>
 
 #if defined(__CYGWIN__) || defined(__FreeBSD__) || defined(__hppa)
 # define BOOST_MATH_NO_LONG_DOUBLE_MATH_FUNCTIONS
@@ -189,7 +190,14 @@
    using std::ceil;\
    using std::floor;\
    using std::log10;\
- using std::sqrt;
+ using std::sqrt;\
+ using boost::math::round;\
+ using boost::math::iround;\
+ using boost::math::lround;\
+ using boost::math::trunc;\
+ using boost::math::itrunc;\
+ using boost::math::ltrunc;\
+ using boost::math::modf;
 
 
 namespace boost{ namespace math{

Modified: branches/doc/boost/optional/optional.hpp
==============================================================================
--- branches/doc/boost/optional/optional.hpp (original)
+++ branches/doc/boost/optional/optional.hpp 2008-04-27 04:13:25 EDT (Sun, 27 Apr 2008)
@@ -1,4 +1,4 @@
-// Copyright (C) 2003, Fernando Luis Cacciola Carballal.
+// Copyright (C) 2003, 2008 Fernando Luis Cacciola Carballal.
 //
 // Use, modification, and distribution is subject to the Boost Software
 // License, Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at
@@ -9,6 +9,9 @@
 // You are welcome to contact the author at:
 // fernando_cacciola_at_[hidden]
 //
+// Revisions:
+// 25 Apr 2008 (improved swap) Fernando Cacciola, Niels Dekker, Thorsten Ottosen
+//
 #ifndef BOOST_OPTIONAL_OPTIONAL_FLC_19NOV2002_HPP
 #define BOOST_OPTIONAL_OPTIONAL_FLC_19NOV2002_HPP
 
@@ -19,6 +22,7 @@
 #include "boost/assert.hpp"
 #include "boost/type.hpp"
 #include "boost/type_traits/alignment_of.hpp"
+#include "boost/type_traits/has_nothrow_constructor.hpp"
 #include "boost/type_traits/type_with_alignment.hpp"
 #include "boost/type_traits/remove_reference.hpp"
 #include "boost/type_traits/is_reference.hpp"
@@ -28,6 +32,7 @@
 #include "boost/detail/reference_content.hpp"
 #include "boost/none.hpp"
 #include "boost/utility/compare_pointees.hpp"
+#include "boost/utility/in_place_factory.hpp"
 
 #include "boost/optional/optional_fwd.hpp"
 
@@ -571,6 +576,14 @@
         return *this ;
       }
 
+ void swap( optional & arg )
+ {
+ // allow for Koenig lookup
+ using std::swap ;
+ swap(*this, arg);
+ }
+
+
     // Returns a reference to the value if this is initialized, otherwise,
     // the behaviour is UNDEFINED
     // No-throw
@@ -878,44 +891,77 @@
 #define BOOST_OPTIONAL_STD_SWAP_INTRODUCED_AT_NS_SCOPE
 #endif
 
-// optional's swap:
-// If both are initialized, calls swap(T&, T&). If this swap throws, both will remain initialized but their values are now unspecified.
-// If only one is initialized, calls U.reset(*I), THEN I.reset().
-// If U.reset(*I) throws, both are left UNCHANGED (U is kept uinitialized and I is never reset)
-// If both are uninitialized, do nothing (no-throw)
-template<class T>
-inline
-void optional_swap ( optional<T>& x, optional<T>& y )
-{
- if ( !x && !!y )
- {
- x.reset(*y);
- y.reset();
- }
- else if ( !!x && !y )
- {
- y.reset(*x);
- x.reset();
- }
- else if ( !!x && !!y )
+ template<bool use_default_constructor> struct swap_selector;
+
+ template<>
+ struct swap_selector<true>
   {
-// GCC > 3.2 and all other compilers have the using declaration at function scope (FLC)
+ template<class T>
+ static void optional_swap ( optional<T>& x, optional<T>& y )
+ {
+ bool hasX = x;
+ bool hasY = y;
+
+ if ( !hasX && !hasY )
+ return;
+
+ if( !hasX )
+ x = boost::in_place();
+ else if ( !hasY )
+ y = boost::in_place();
+
+ // GCC > 3.2 and all other compilers have the using declaration at function scope (FLC)
 #ifndef BOOST_OPTIONAL_STD_SWAP_INTRODUCED_AT_NS_SCOPE
- // allow for Koenig lookup
- using std::swap ;
+ // allow for Koenig lookup
+ using std::swap ;
 #endif
- swap(*x,*y);
- }
-}
+ swap(*x,*y);
+
+ if( !hasX )
+ y = boost::none ;
+ else if( !hasY )
+ x = boost::none ;
+ }
+ };
+
+ template<>
+ struct swap_selector<false>
+ {
+ template<class T>
+ static void optional_swap ( optional<T>& x, optional<T>& y )
+ {
+ if ( !x && !!y )
+ {
+ x = *y;
+ y = boost::none ;
+ }
+ else if ( !!x && !y )
+ {
+ y = *x ;
+ x = boost::none ;
+ }
+ else if ( !!x && !!y )
+ {
+ // GCC > 3.2 and all other compilers have the using declaration at function scope (FLC)
+ #ifndef BOOST_OPTIONAL_STD_SWAP_INTRODUCED_AT_NS_SCOPE
+ // allow for Koenig lookup
+ using std::swap ;
+ #endif
+ swap(*x,*y);
+ }
+ }
+ };
 
 } // namespace optional_detail
 
+template<class T>
+struct optional_swap_should_use_default_constructor : has_nothrow_default_constructor<T> {} ;
+
 template<class T> inline void swap ( optional<T>& x, optional<T>& y )
 {
- optional_detail::optional_swap(x,y);
+ optional_detail::swap_selector<optional_swap_should_use_default_constructor<T>::value>::optional_swap(x, y);
 }
 
-
 } // namespace boost
 
 #endif

Modified: branches/doc/boost/shared_ptr.hpp
==============================================================================
--- branches/doc/boost/shared_ptr.hpp (original)
+++ branches/doc/boost/shared_ptr.hpp 2008-04-27 04:13:25 EDT (Sun, 27 Apr 2008)
@@ -20,7 +20,11 @@
 #include <boost/detail/shared_ptr_nmt.hpp>
 #else
 
-#include <memory> // for std::auto_ptr
+// In order to avoid circular dependencies with Boost.TR1
+// we make sure that our include of <memory> doesn't try to
+// pull in the TR1 headers: that's why we use this header
+// rather than including <memory> directly:
+#include <boost/config/no_tr1/memory.hpp> // std::auto_ptr
 
 #include <boost/assert.hpp>
 #include <boost/checked_delete.hpp>
@@ -28,6 +32,11 @@
 #include <boost/detail/shared_count.hpp>
 #include <boost/detail/workaround.hpp>
 
+#if !defined(BOOST_SP_NO_ATOMIC_ACCESS)
+#include <boost/detail/spinlock_pool.hpp>
+#include <boost/memory_order.hpp>
+#endif
+
 #include <algorithm> // for std::swap
 #include <functional> // for std::less
 #include <typeinfo> // for std::bad_cast
@@ -219,6 +228,10 @@
     {
     }
 
+ shared_ptr(detail::shared_count const & c, T * p): px(p), pn(c) // never throws
+ {
+ }
+
     // aliasing
     template< class Y >
     shared_ptr( shared_ptr<Y> const & r, T * p ): px( p ), pn( r.pn ) // never throws
@@ -332,6 +345,10 @@
         r.px = 0;
     }
 
+ shared_ptr(detail::shared_count && c, T * p): px(p), pn( static_cast< detail::shared_count && >( c ) ) // never throws
+ {
+ }
+
     shared_ptr & operator=( shared_ptr && r ) // never throws
     {
         this_type( static_cast< shared_ptr && >( r ) ).swap( *this );
@@ -373,6 +390,18 @@
         this_type( r, p ).swap( *this );
     }
 
+ void reset( detail::shared_count const & c, T * p )
+ {
+ this_type( c, p ).swap( *this );
+ }
+
+#if defined( BOOST_HAS_RVALUE_REFS )
+ void reset( detail::shared_count && c, T * p )
+ {
+ this_type( static_cast< detail::shared_count && >( c ), p ).swap( *this );
+ }
+#endif
+
     reference operator* () const // never throws
     {
         BOOST_ASSERT(px != 0);
@@ -458,6 +487,11 @@
         pn.swap(other.pn);
     }
 
+ detail::shared_count const & get_shared_count() const // never throws
+ {
+ return pn;
+ }
+
     template<class Y> bool _internal_less(shared_ptr<Y> const & rhs) const
     {
         return pn < rhs.pn;
@@ -468,6 +502,65 @@
         return pn.get_deleter( ti );
     }
 
+ // atomic access
+
+#if !defined(BOOST_SP_NO_ATOMIC_ACCESS)
+
+ shared_ptr<T> atomic_load( memory_order /*mo*/ = memory_order_seq_cst ) const
+ {
+ boost::detail::spinlock_pool<2>::scoped_lock lock( this );
+ return *this;
+ }
+
+ void atomic_store( shared_ptr<T> r, memory_order /*mo*/ = memory_order_seq_cst )
+ {
+ boost::detail::spinlock_pool<2>::scoped_lock lock( this );
+ swap( r );
+ }
+
+ shared_ptr<T> atomic_swap( shared_ptr<T> r, memory_order /*mo*/ = memory_order_seq_cst )
+ {
+ boost::detail::spinlock & sp = boost::detail::spinlock_pool<2>::spinlock_for( this );
+
+ sp.lock();
+ swap( r );
+ sp.unlock();
+
+ return r; // return std::move(r)
+ }
+
+ bool atomic_compare_swap( shared_ptr<T> & v, shared_ptr<T> w )
+ {
+ boost::detail::spinlock & sp = boost::detail::spinlock_pool<2>::spinlock_for( this );
+
+ sp.lock();
+
+ if( px == v.px && pn == v.pn )
+ {
+ swap( w );
+
+ sp.unlock();
+
+ return true;
+ }
+ else
+ {
+ shared_ptr tmp( *this );
+
+ sp.unlock();
+
+ tmp.swap( v );
+ return false;
+ }
+ }
+
+ inline bool atomic_compare_swap( shared_ptr<T> & v, shared_ptr<T> w, memory_order /*success*/, memory_order /*failure*/ )
+ {
+ return atomic_compare_swap( v, w ); // std::move( w )
+ }
+
+#endif
+
 // Tasteless as this may seem, making all members public allows member templates
 // to work in the absence of member template friends. (Matthew Langston)
 
@@ -566,7 +659,7 @@
 
 #if !defined(BOOST_NO_IOSTREAM)
 
-#if defined(__GNUC__) && (__GNUC__ < 3)
+#if defined(BOOST_NO_TEMPLATED_IOSTREAMS) || ( defined(__GNUC__) && (__GNUC__ < 3) )
 
 template<class Y> std::ostream & operator<< (std::ostream & os, shared_ptr<Y> const & p)
 {

Modified: branches/doc/boost/spirit/home/classic/namespace.hpp
==============================================================================
--- branches/doc/boost/spirit/home/classic/namespace.hpp (original)
+++ branches/doc/boost/spirit/home/classic/namespace.hpp 2008-04-27 04:13:25 EDT (Sun, 27 Apr 2008)
@@ -11,12 +11,21 @@
 
 #if defined(BOOST_SPIRIT_USE_OLD_NAMESPACE)
 
+// Use the old namespace for Spirit.Classic, everything is located in the
+// namespace boost::spirit.
+// This is in place for backwards compatibility with Spirit V1.8.x. Don't use
+// it when combining Spirit.Classic with other parts of the library
+
 #define BOOST_SPIRIT_CLASSIC_NAMESPACE_BEGIN /*namespace classic {*/
-#define BOOST_SPIRIT_CLASSIC_NS boost::spirit/*classic*/
+#define BOOST_SPIRIT_CLASSIC_NS boost::spirit/*::classic*/
 #define BOOST_SPIRIT_CLASSIC_NAMESPACE_END /*}*/
         
 #else
 
+// This is the normal (and suggested) mode of operation when using
+// Spirit.Classic. Everything will be located in the namespace
+// boost::spirit::classic, avoiding name clashes with other parts of Spirit.
+
 #define BOOST_SPIRIT_CLASSIC_NAMESPACE_BEGIN namespace classic {
 #define BOOST_SPIRIT_CLASSIC_NS boost::spirit::classic
 #define BOOST_SPIRIT_CLASSIC_NAMESPACE_END }

Modified: branches/doc/boost/spirit/home/karma/detail/output_iterator.hpp
==============================================================================
--- branches/doc/boost/spirit/home/karma/detail/output_iterator.hpp (original)
+++ branches/doc/boost/spirit/home/karma/detail/output_iterator.hpp 2008-04-27 04:13:25 EDT (Sun, 27 Apr 2008)
@@ -169,6 +169,9 @@
 
         private:
             output_iterator& parent;
+
+ // suppress warning about assignment operator not being generated
+ output_proxy& operator=(output_proxy const&);
         };
         
 #if !defined(BOOST_NO_MEMBER_TEMPLATE_FRIENDS)
@@ -260,6 +263,9 @@
         counting_sink count_data; // for counting
         buffer_sink<OutputIterator> buffer_data; // for buffering
         output_mode mode;
+
+ // suppress warning about assignment operator not being generated
+ output_iterator& operator=(output_iterator const&);
     };
 
     ///////////////////////////////////////////////////////////////////////////

Modified: branches/doc/boost/spirit/home/karma/detail/string_generate.hpp
==============================================================================
--- branches/doc/boost/spirit/home/karma/detail/string_generate.hpp (original)
+++ branches/doc/boost/spirit/home/karma/detail/string_generate.hpp 2008-04-27 04:13:25 EDT (Sun, 27 Apr 2008)
@@ -22,8 +22,7 @@
     inline bool
     string_generate(OutputIterator& sink, Char const* str, unused_type = unused)
     {
- Char ch;
- for (/**/; !!(ch = *str); ++str)
+ for (Char ch = *str; ch != 0; ch = *++str)
             detail::generate_to(sink, ch);
         return true;
     }
@@ -53,11 +52,8 @@
     inline bool
     string_generate(OutputIterator& sink, Char const* str, Tag tag)
     {
- Char ch;
- for (/**/; !!(ch = *str); ++str)
- {
+ for (Char ch = *str; ch != 0; ch = *++str)
             detail::generate_to(sink, ch, tag);
- }
         return true;
     }
 

Modified: branches/doc/boost/spirit/home/karma/numeric/detail/numeric_utils.hpp
==============================================================================
--- branches/doc/boost/spirit/home/karma/numeric/detail/numeric_utils.hpp (original)
+++ branches/doc/boost/spirit/home/karma/numeric/detail/numeric_utils.hpp 2008-04-27 04:13:25 EDT (Sun, 27 Apr 2008)
@@ -527,6 +527,12 @@
             return call_n(sink, T(n), p);
         }
         
+#if BOOST_WORKAROUND(BOOST_MSVC, >= 1400)
+# pragma warning(push)
+# pragma warning(disable: 4100) // 'p': unreferenced formal parameter
+# pragma warning(disable: 4127) // conditional expression is constant
+#endif
+
         ///////////////////////////////////////////////////////////////////////
         // This is the workhorse behind the real generator
         ///////////////////////////////////////////////////////////////////////
@@ -617,6 +623,11 @@
             }
             return r;
         }
+
+#if BOOST_WORKAROUND(BOOST_MSVC, >= 1400)
+# pragma warning(pop)
+#endif
+
     };
 
 }}}

Modified: branches/doc/boost/spirit/home/lex/lexer/lexer.hpp
==============================================================================
--- branches/doc/boost/spirit/home/lex/lexer/lexer.hpp (original)
+++ branches/doc/boost/spirit/home/lex/lexer/lexer.hpp 2008-04-27 04:13:25 EDT (Sun, 27 Apr 2008)
@@ -43,8 +43,8 @@
             // initialize proto base class
             typedef
                 terminal_holder<lexer_def_ const*, lexer_def_>
- terminal_holder;
- typedef typename proto::terminal<terminal_holder>::type tag;
+ terminal_holder_;
+ typedef typename proto::terminal<terminal_holder_>::type tag;
             typedef proto::extends<tag, lexer_def_> base_type;
 
             typedef typename LexerDef::id_type id_type;

Modified: branches/doc/boost/spirit/home/lex/lexer/lexertl/lexertl_functor.hpp
==============================================================================
--- branches/doc/boost/spirit/home/lex/lexer/lexertl/lexertl_functor.hpp (original)
+++ branches/doc/boost/spirit/home/lex/lexer/lexertl/lexertl_functor.hpp 2008-04-27 04:13:25 EDT (Sun, 27 Apr 2008)
@@ -20,8 +20,10 @@
 #include <boost/spirit/home/support/detail/lexer/rules.hpp>
 #include <boost/spirit/home/support/detail/lexer/state_machine.hpp>
 #include <boost/spirit/home/lex/lexer/lexertl/iterator_tokenizer.hpp>
+#include <boost/spirit/home/lex/lexer/lexertl/wrap_action.hpp>
 
 #if 0 != __COMO_VERSION__ || !BOOST_WORKAROUND(BOOST_MSVC, <= 1310)
+#define BOOST_SPIRIT_STATIC_EOF 1
 #define BOOST_SPIRIT_EOF_PREFIX static
 #else
 #define BOOST_SPIRIT_EOF_PREFIX
@@ -47,6 +49,10 @@
 
             typedef unused_type semantic_actions_type;
 
+ typedef
+ detail::wrap_action<unused_type, iterpair_type, Data>
+ wrap_action_type;
+
             // initialize the shared data
             template <typename IterData>
             Data (IterData const& data_, Iterator& first_, Iterator const& last_)
@@ -83,6 +89,7 @@
           : Data<Iterator, mpl::false_, mpl::false_>
         {
             typedef Data<Iterator, mpl::false_, mpl::false_> base_type;
+ typedef std::size_t state_type;
             
             // initialize the shared data
             template <typename IterData>
@@ -127,11 +134,15 @@
                 boost::detail::iterator_traits<Iterator>::value_type
             char_type;
 
- typedef void functor_type(iterpair_type, std::size_t, Data&, bool&);
+ typedef void functor_type(iterpair_type, std::size_t, bool&, Data&);
             typedef boost::function<functor_type> functor_wrapper_type;
             typedef std::multimap<std::size_t, functor_wrapper_type>
                 semantic_actions_type;
 
+ typedef
+ detail::wrap_action<functor_wrapper_type, iterpair_type, Data>
+ wrap_action_type;
+
             template <typename IterData>
             Data (IterData const& data_, Iterator& first_, Iterator const& last_)
               : base_type(data_, first_, last_),
@@ -154,7 +165,7 @@
                 std::pair<iterator_type, iterator_type> p = actions.equal_range(id);
                 while (p.first != p.second)
                 {
- ((*p.first).second)(itp, id, *this, match);
+ ((*p.first).second)(itp, id, match, *this);
                     if (!match)
                         return false; // return a 'no-match'
                     ++p.first;
@@ -230,9 +241,9 @@
         
     public:
         lexertl_functor()
-#if 0 != __DECCXX_VER || BOOST_INTEL_CXX_VERSION > 900 || defined(__PGI)
+#if defined(__PGI)
           : eof()
-#endif // 0 != __DECCXX_VER
+#endif
         {}
         
         ///////////////////////////////////////////////////////////////////////
@@ -247,12 +258,20 @@
         typedef Iterator iterator_type;
         typedef typename shared::semantic_actions_type semantic_actions_type;
 
+ // this is needed to wrap the semantic actions in a proper way
+ typedef typename shared::wrap_action_type wrap_action_type;
+
+ ///////////////////////////////////////////////////////////////////////
         template <typename MultiPass>
         static result_type& get_next(MultiPass& mp, result_type& result)
         {
             shared& data = mp.shared->ftor;
             if (data.first == data.last)
+#if defined(BOOST_SPIRIT_STATIC_EOF)
                 return result = eof;
+#else
+ return result = mp.ftor.eof;
+#endif
 
             Iterator end = data.first;
             std::size_t id = data.next(end);
@@ -270,7 +289,11 @@
                 result = result_type(0);
             }
             else if (0 == id) { // EOF reached
+#if defined(BOOST_SPIRIT_STATIC_EOF)
                 result = eof;
+#else
+ result = mp.ftor.eof;
+#endif
             }
             else {
 #if defined(BOOST_SPIRIT_LEXERTL_DEBUG)
@@ -330,13 +353,13 @@
             return mp.shared->ftor.rules.state(statename);
         }
         
- // we don't need this
+ // we don't need this, but it must be there
         template <typename MultiPass>
- static void destroy(MultiPass const& mp)
+ static void destroy(MultiPass const&)
         {}
     };
 
-#if 0 != __COMO_VERSION__ || !BOOST_WORKAROUND(BOOST_MSVC, <= 1310)
+#if defined(BOOST_SPIRIT_STATIC_EOF)
     ///////////////////////////////////////////////////////////////////////////
     // eof token
     ///////////////////////////////////////////////////////////////////////////
@@ -348,10 +371,11 @@
                 Token, Iterator, SupportsActors, SupportsState>::eof =
             typename lexertl_functor<
                 Token, Iterator, SupportsActors, SupportsState>::result_type();
-#endif // 0 != __COMO_VERSION__
+#endif
 
 }}}
 
 #undef BOOST_SPIRIT_EOF_PREFIX
+#undef BOOST_SPIRIT_STATIC_EOF
 
 #endif

Modified: branches/doc/boost/spirit/home/lex/lexer/lexertl/lexertl_iterator.hpp
==============================================================================
--- branches/doc/boost/spirit/home/lex/lexer/lexertl/lexertl_iterator.hpp (original)
+++ branches/doc/boost/spirit/home/lex/lexer/lexertl/lexertl_iterator.hpp 2008-04-27 04:13:25 EDT (Sun, 27 Apr 2008)
@@ -54,7 +54,7 @@
         typedef multi_pass_policies::split_std_deque storage_policy;
         
         typedef multi_pass_policies::default_policy<
- input_policy, ownership_policy, check_policy, storage_policy>
+ ownership_policy, check_policy, input_policy, storage_policy>
             policy_type;
         typedef spirit::multi_pass<functor_data_type, policy_type> type;
     };

Modified: branches/doc/boost/spirit/home/lex/lexer/lexertl/lexertl_lexer.hpp
==============================================================================
--- branches/doc/boost/spirit/home/lex/lexer/lexertl/lexertl_lexer.hpp (original)
+++ branches/doc/boost/spirit/home/lex/lexer/lexertl/lexertl_lexer.hpp 2008-04-27 04:13:25 EDT (Sun, 27 Apr 2008)
@@ -65,7 +65,10 @@
         {
             std::basic_string<Char> result(1, ch);
             if (detail::must_escape(ch))
- result.insert(0, 1, '\\');
+ {
+ typedef typename std::basic_string<Char>::size_type size_type;
+ result.insert((size_type)0, 1, '\\');
+ }
             return result;
         }
     }
@@ -293,7 +296,9 @@
                 typename Functor::semantic_actions_type::value_type
             value_type;
             
- actions.insert(value_type(id, act));
+ typedef typename Functor::wrap_action_type wrapper_type;
+
+ actions.insert(value_type(id, wrapper_type::call(act)));
         }
                 
         bool init_dfa() const

Modified: branches/doc/boost/spirit/home/lex/lexer/lexertl/lexertl_static_functor.hpp
==============================================================================
--- branches/doc/boost/spirit/home/lex/lexer/lexertl/lexertl_static_functor.hpp (original)
+++ branches/doc/boost/spirit/home/lex/lexer/lexertl/lexertl_static_functor.hpp 2008-04-27 04:13:25 EDT (Sun, 27 Apr 2008)
@@ -20,8 +20,10 @@
 #include <boost/spirit/home/support/detail/lexer/rules.hpp>
 #include <boost/spirit/home/support/detail/lexer/state_machine.hpp>
 #include <boost/spirit/home/lex/lexer/lexertl/iterator_tokenizer.hpp>
+#include <boost/spirit/home/lex/lexer/lexertl/wrap_action.hpp>
 
 #if 0 != __COMO_VERSION__ || !BOOST_WORKAROUND(BOOST_MSVC, <= 1310)
+#define BOOST_SPIRIT_STATIC_EOF 1
 #define BOOST_SPIRIT_EOF_PREFIX static
 #else
 #define BOOST_SPIRIT_EOF_PREFIX
@@ -50,6 +52,10 @@
 
             typedef unused_type semantic_actions_type;
 
+ typedef
+ detail::wrap_action<unused_type, iterpair_type, Data>
+ wrap_action_type;
+
             // initialize the shared data
             template <typename IterData>
             Data (IterData const& data_, Iterator& first_, Iterator const& last_)
@@ -121,11 +127,15 @@
                 boost::detail::iterator_traits<Iterator>::value_type
             char_type;
 
- typedef void functor_type(iterpair_type, std::size_t, Data&, bool&);
+ typedef void functor_type(iterpair_type, std::size_t, bool&, Data&);
             typedef boost::function<functor_type> functor_wrapper_type;
             typedef std::multimap<std::size_t, functor_wrapper_type>
                 semantic_actions_type;
 
+ typedef
+ detail::wrap_action<functor_wrapper_type, iterpair_type, Data>
+ wrap_action_type;
+
             template <typename IterData>
             Data (IterData const& data_, Iterator& first_, Iterator const& last_)
               : base_type(data_, first_, last_),
@@ -148,7 +158,7 @@
                 std::pair<iterator_type, iterator_type> p = actions.equal_range(id);
                 while (p.first != p.second)
                 {
- ((*p.first).second)(itp, id, *this, match);
+ ((*p.first).second)(itp, id, match, *this);
                     if (!match)
                         return false; // return a 'no-match'
                     ++p.first;
@@ -224,9 +234,9 @@
         
     public:
         lexertl_static_functor()
-#if 0 != __DECCXX_VER || BOOST_INTEL_CXX_VERSION > 900
- , eof()
-#endif // 0 != __DECCXX_VER
+#if defined(__PGI)
+ : eof()
+#endif
         {}
         
         ///////////////////////////////////////////////////////////////////////
@@ -242,12 +252,20 @@
         typedef typename shared::semantic_actions_type semantic_actions_type;
         typedef typename shared::next_token_functor next_token_functor;
 
+ // this is needed to wrap the semantic actions in a proper way
+ typedef typename shared::wrap_action_type wrap_action_type;
+
+ ///////////////////////////////////////////////////////////////////////
         template <typename MultiPass>
- result_type& operator()(MultiPass& mp, result_type& result)
+ static result_type& get_next(MultiPass& mp, result_type& result)
         {
             shared& data = mp.shared->ftor;
             if (data.first == data.last)
+#if defined(BOOST_SPIRIT_STATIC_EOF)
                 return result = eof;
+#else
+ return result = mp.ftor.eof;
+#endif
 
             Iterator end = data.first;
             std::size_t id = data.next(end);
@@ -265,7 +283,11 @@
                 return result = result_type(0);
             }
             else if (0 == id) { // EOF reached
+#if defined(BOOST_SPIRIT_STATIC_EOF)
                 return result = eof;
+#else
+ return result = mp.ftor.eof;
+#endif
             }
             
 #if defined(BOOST_SPIRIT_LEXERTL_DEBUG)
@@ -320,9 +342,14 @@
         {
             return mp.shared->ftor.rules.state(statename);
         }
+
+ // we don't need this, but it must be there
+ template <typename MultiPass>
+ static void destroy(MultiPass const&)
+ {}
     };
 
-#if 0 != __COMO_VERSION__ || !BOOST_WORKAROUND(BOOST_MSVC, <= 1310)
+#if defined(BOOST_SPIRIT_STATIC_EOF)
     ///////////////////////////////////////////////////////////////////////////
     // eof token
     ///////////////////////////////////////////////////////////////////////////
@@ -334,10 +361,11 @@
                 Token, Iterator, SupportsActors, SupportsState>::eof =
             typename lexertl_static_functor<
                 Token, Iterator, SupportsActors, SupportsState>::result_type();
-#endif // 0 != __COMO_VERSION__
+#endif
 
 }}}
 
 #undef BOOST_SPIRIT_EOF_PREFIX
+#undef BOOST_SPIRIT_STATIC_EOF
 
 #endif

Modified: branches/doc/boost/spirit/home/lex/lexer/lexertl/lexertl_static_lexer.hpp
==============================================================================
--- branches/doc/boost/spirit/home/lex/lexer/lexertl/lexertl_static_lexer.hpp (original)
+++ branches/doc/boost/spirit/home/lex/lexer/lexertl/lexertl_static_lexer.hpp 2008-04-27 04:13:25 EDT (Sun, 27 Apr 2008)
@@ -69,6 +69,9 @@
         typedef std::basic_string<char_type> string_type;
 
     public:
+ typedef Token token_type;
+ typedef typename Token::id_type id_type;
+
         // interface for token definition management
         void add_token (char_type const* state, string_type const& tokendef,
             std::size_t token_id)
@@ -167,6 +170,7 @@
         // Every lexer type to be used as a lexer for Spirit has to conform to
         // a public interface
         typedef Token token_type;
+ typedef typename Token::id_type id_type;
         typedef TokenSet token_set;
         typedef lexertl_iterator<Functor> iterator_type;
 

Modified: branches/doc/boost/spirit/home/lex/lexer/lexertl/lexertl_token.hpp
==============================================================================
--- branches/doc/boost/spirit/home/lex/lexer/lexertl/lexertl_token.hpp (original)
+++ branches/doc/boost/spirit/home/lex/lexer/lexertl/lexertl_token.hpp 2008-04-27 04:13:25 EDT (Sun, 27 Apr 2008)
@@ -101,7 +101,7 @@
     struct lexertl_token;
 
     ///////////////////////////////////////////////////////////////////////////
- // This specialization of the toke type doesn't contain any item data and
+ // This specialization of the token type doesn't contain any item data and
     // doesn't support working with lexer states.
     ///////////////////////////////////////////////////////////////////////////
     template <typename Iterator>
@@ -143,7 +143,7 @@
     };
     
     ///////////////////////////////////////////////////////////////////////////
- // This specialization of the toke type doesn't contain any item data but
+ // This specialization of the token type doesn't contain any item data but
     // supports working with lexer states.
     ///////////////////////////////////////////////////////////////////////////
     template <typename Iterator>

Modified: branches/doc/boost/spirit/home/lex/lexer/token_def.hpp
==============================================================================
--- branches/doc/boost/spirit/home/lex/lexer/token_def.hpp (original)
+++ branches/doc/boost/spirit/home/lex/lexer/token_def.hpp 2008-04-27 04:13:25 EDT (Sun, 27 Apr 2008)
@@ -69,8 +69,8 @@
     {
     private:
         // initialize proto base class
- typedef terminal_holder<token_def*, token_def> terminal_holder;
- typedef typename proto::terminal<terminal_holder>::type tag;
+ typedef terminal_holder<token_def*, token_def> terminal_holder_;
+ typedef typename proto::terminal<terminal_holder_>::type tag;
         typedef proto::extends<tag, token_def> base_type;
 
         tag make_tag()

Modified: branches/doc/boost/spirit/home/lex/lexer/token_set.hpp
==============================================================================
--- branches/doc/boost/spirit/home/lex/lexer/token_set.hpp (original)
+++ branches/doc/boost/spirit/home/lex/lexer/token_set.hpp 2008-04-27 04:13:25 EDT (Sun, 27 Apr 2008)
@@ -46,8 +46,8 @@
         typedef TokenSet base_token_set;
 
         // initialize proto base class
- typedef terminal_holder<token_set*, token_set> terminal_holder;
- typedef typename proto::terminal<terminal_holder>::type tag;
+ typedef terminal_holder<token_set*, token_set> terminal_holder_;
+ typedef typename proto::terminal<terminal_holder_>::type tag;
         typedef proto::extends<tag, token_set> base_type;
 
         tag make_tag()

Modified: branches/doc/boost/spirit/home/phoenix/operator/io.hpp
==============================================================================
--- branches/doc/boost/spirit/home/phoenix/operator/io.hpp (original)
+++ branches/doc/boost/spirit/home/phoenix/operator/io.hpp 2008-04-27 04:13:25 EDT (Sun, 27 Apr 2008)
@@ -20,14 +20,14 @@
     inline typename detail::enable_if_ostream<T0, T1>::type
     operator<<(T0& a0, actor<T1> const& a1)
     {
- return compose<shift_left_eval>(ref(a0), a1);
+ return compose<shift_left_eval>(phoenix::ref(a0), a1);
     }
 
     template <typename T0, typename T1>
     inline typename detail::enable_if_istream<T0, T1>::type
     operator>>(T0& a0, actor<T1> const& a1)
     {
- return compose<shift_right_eval>(ref(a0), a1);
+ return compose<shift_right_eval>(phoenix::ref(a0), a1);
     }
 
 ///////////////////////////////////////////////////////////////////////////////

Modified: branches/doc/boost/spirit/home/phoenix/statement/detail/switch.hpp
==============================================================================
--- branches/doc/boost/spirit/home/phoenix/statement/detail/switch.hpp (original)
+++ branches/doc/boost/spirit/home/phoenix/statement/detail/switch.hpp 2008-04-27 04:13:25 EDT (Sun, 27 Apr 2008)
@@ -107,11 +107,11 @@
                         typename fusion::result_of::begin<Cases>::type
>::type
>
- is_default_case;
+ is_default_case_;
 
             typedef typename
                 mpl::eval_if<
- is_default_case
+ is_default_case_
                   , mpl::identity<Cases>
                   , fusion::result_of::push_front<
                         Cases const, actor<default_case<actor<null_actor> > > >
@@ -135,7 +135,7 @@
             static type
             eval(Cases const& cases)
             {
- return eval(cases, is_default_case());
+ return eval(cases, is_default_case_());
             }
         };
 
@@ -143,12 +143,12 @@
         struct switch_composite
         {
             BOOST_STATIC_ASSERT(fusion::traits::is_sequence<Cases>::value);
- typedef ensure_default<Cases> ensure_default;
+ typedef ensure_default<Cases> ensure_default_;
 
             typedef typename
                 fusion::result_of::as_vector<
                     typename fusion::result_of::push_front<
- typename ensure_default::type, Cond>::type
+ typename ensure_default_::type, Cond>::type
>::type
             tuple_type;
 
@@ -162,7 +162,7 @@
             eval(Cond const& cond, Cases const& cases)
             {
                 return fusion::as_vector(
- fusion::push_front(ensure_default::eval(cases), cond));
+ fusion::push_front(ensure_default_::eval(cases), cond));
             }
         };
 

Modified: branches/doc/boost/spirit/home/qi/auxiliary.hpp
==============================================================================
--- branches/doc/boost/spirit/home/qi/auxiliary.hpp (original)
+++ branches/doc/boost/spirit/home/qi/auxiliary.hpp 2008-04-27 04:13:25 EDT (Sun, 27 Apr 2008)
@@ -13,6 +13,7 @@
 #include <boost/spirit/home/qi/auxiliary/lazy.hpp>
 #include <boost/spirit/home/qi/auxiliary/functor.hpp>
 #include <boost/spirit/home/qi/auxiliary/functor_director.hpp>
+#include <boost/spirit/home/qi/auxiliary/primitives.hpp>
 #include <boost/spirit/home/qi/auxiliary/meta_grammar.hpp>
 
 #endif

Modified: branches/doc/boost/spirit/home/qi/auxiliary/meta_grammar.hpp
==============================================================================
--- branches/doc/boost/spirit/home/qi/auxiliary/meta_grammar.hpp (original)
+++ branches/doc/boost/spirit/home/qi/auxiliary/meta_grammar.hpp 2008-04-27 04:13:25 EDT (Sun, 27 Apr 2008)
@@ -30,6 +30,13 @@
     struct lazy_parser;
     struct functor_director;
 
+ struct eol_director;
+ struct eoi_director;
+
+ template <typename Positive>
+ struct negated_end_director;
+
+ ///////////////////////////////////////////////////////////////////////////
     template <typename Expr, typename Enable>
     struct is_valid_expr;
 
@@ -41,7 +48,7 @@
     ///////////////////////////////////////////////////////////////////////////
 
     // none, eps and eps(f)
- struct auxiliary_meta_grammar
+ struct auxiliary_meta_grammar1
       : proto::or_<
             meta_grammar::empty_terminal_rule<
                 qi::domain, tag::none, none>
@@ -60,6 +67,38 @@
     {
     };
 
+ // eol, eoi
+ struct auxiliary_end_meta_grammar
+ : proto::or_<
+ meta_grammar::terminal_rule<qi::domain, tag::eol, eol_director>
+ , meta_grammar::terminal_rule<qi::domain, tag::eoi, eoi_director>
+ >
+ {
+ };
+
+ struct negated_auxiliary_end_meta_grammar
+ : proto::or_<
+ auxiliary_end_meta_grammar
+ , meta_grammar::compose_single<
+ proto::unary_expr<
+ proto::tag::complement
+ , negated_auxiliary_end_meta_grammar
+ >
+ , qi::domain
+ , negated_end_director<mpl::_>
+ >
+ >
+ {
+ };
+
+ struct auxiliary_meta_grammar
+ : proto::or_<
+ auxiliary_meta_grammar1
+ , negated_auxiliary_end_meta_grammar
+ >
+ {
+ };
+
     ///////////////////////////////////////////////////////////////////////////
     // These specializations non-intrusively hooks into the RD meta-grammar.
     // (see qi/meta_grammar.hpp)

Modified: branches/doc/boost/spirit/home/qi/char.hpp
==============================================================================
--- branches/doc/boost/spirit/home/qi/char.hpp (original)
+++ branches/doc/boost/spirit/home/qi/char.hpp 2008-04-27 04:13:25 EDT (Sun, 27 Apr 2008)
@@ -10,7 +10,6 @@
 #include <boost/spirit/home/qi/char/char_parser.hpp>
 #include <boost/spirit/home/qi/char/char.hpp>
 #include <boost/spirit/home/qi/char/char_class.hpp>
-#include <boost/spirit/home/qi/char/primitives.hpp>
 #include <boost/spirit/home/qi/char/meta_grammar.hpp>
 
 #endif

Modified: branches/doc/boost/spirit/home/qi/char/char.hpp
==============================================================================
--- branches/doc/boost/spirit/home/qi/char/char.hpp (original)
+++ branches/doc/boost/spirit/home/qi/char/char.hpp 2008-04-27 04:13:25 EDT (Sun, 27 Apr 2008)
@@ -18,6 +18,7 @@
 #include <boost/utility/enable_if.hpp>
 #include <boost/type_traits/remove_reference.hpp>
 #include <boost/foreach.hpp>
+#include <boost/mpl/print.hpp>
 
 namespace boost { namespace spirit { namespace qi
 {
@@ -52,24 +53,22 @@
             typedef unused_type type; // literal parsers have no attribute
         };
 
- template <typename Char_, typename CharParam>
- static bool test_impl(Char_ ch, CharParam param)
+ template <typename CharParam>
+ static CharParam get_char(CharParam ch)
         {
- // tests plain chars
- return ch == param;
+ return ch;
         }
 
- template <typename Char_, typename CharParam>
- static bool test_impl(Char_ const* ch, CharParam param)
+ template <typename CharParam>
+ static CharParam get_char(CharParam const* str)
         {
- // tests single char null terminated strings
- return *ch == param;
+ return *str;
         }
 
         template <typename Component, typename CharParam, typename Context>
         static bool test(Component const& component, CharParam ch, Context&)
         {
- return test_impl(fusion::at_c<0>(component.elements), ch);
+ return get_char(fusion::at_c<0>(component.elements)) == ch;
         }
 
         template <typename Component>
@@ -77,7 +76,7 @@
         {
             return std::string("'")
                 + spirit::detail::to_narrow_char(
- fusion::at_c<0>(component.elements))
+ get_char(fusion::at_c<0>(component.elements)))
                 + '\'';
         }
     };
@@ -204,11 +203,21 @@
             typedef unused_type type; // literal parsers have no attribute
         };
 
+ static Char get_char(Char ch)
+ {
+ return ch;
+ }
+
+ static Char get_char(Char const* str)
+ {
+ return *str;
+ }
+
         template <typename Component, typename CharParam, typename Context>
         static bool test(Component const& component, CharParam ch, Context&)
         {
- return fusion::at_c<0>(component.elements) == ch
- || fusion::at_c<1>(component.elements) == ch
+ return get_char(fusion::at_c<0>(component.elements)) == ch
+ || get_char(fusion::at_c<1>(component.elements)) == ch
             ;
         }
 
@@ -216,9 +225,13 @@
         static std::string what(Component const& component)
         {
             std::string result;
- result += std::string("'") + fusion::at_c<0>(component.elements) + '\'';
+ result += std::string("'")
+ + spirit::detail::to_narrow_char(
+ get_char(fusion::at_c<0>(component.elements))) + '\'';
             result += " or ";
- result += std::string("'") + fusion::at_c<1>(component.elements) + '\'';
+ result += std::string("'") +
+ spirit::detail::to_narrow_char(
+ get_char(fusion::at_c<1>(component.elements))) + '\'';
             return result;
         }
     };
@@ -321,12 +334,22 @@
             component<qi::domain, qi::no_case_literal_char<Char>, vector_type>
         type;
 
+ static Char get_char(Char ch)
+ {
+ return ch;
+ }
+
+ static Char get_char(Char const* str)
+ {
+ return *str;
+ }
+
         static type
         call(Elements const& elements)
         {
             typedef typename Modifier::char_set char_set;
 
- Char ch = fusion::at_c<0>(elements);
+ Char ch = get_char(fusion::at_c<0>(elements));
             vector_type v(
                 char_set::tolower(ch)
               , char_set::toupper(ch)

Modified: branches/doc/boost/spirit/home/qi/char/meta_grammar.hpp
==============================================================================
--- branches/doc/boost/spirit/home/qi/char/meta_grammar.hpp (original)
+++ branches/doc/boost/spirit/home/qi/char/meta_grammar.hpp 2008-04-27 04:13:25 EDT (Sun, 27 Apr 2008)
@@ -40,12 +40,9 @@
     template <typename Tag>
     struct char_class;
 
- struct eol_director;
- struct eoi_director;
-
- ///////////////////////////////////////////////////////////////////////////
     struct char_meta_grammar;
 
+ ///////////////////////////////////////////////////////////////////////////
     template <typename Expr, typename Enable>
     struct is_valid_expr;
 
@@ -350,8 +347,6 @@
               , qi::domain
               , char_class<mpl::_>
>
- , meta_grammar::terminal_rule<qi::domain, tag::eol, eol_director>
- , meta_grammar::terminal_rule<qi::domain, tag::eoi, eoi_director>
>
     {};
 

Deleted: branches/doc/boost/spirit/home/qi/char/primitives.hpp
==============================================================================
--- branches/doc/boost/spirit/home/qi/char/primitives.hpp 2008-04-27 04:13:25 EDT (Sun, 27 Apr 2008)
+++ (empty file)
@@ -1,96 +0,0 @@
-/*=============================================================================
- Copyright (c) 2001-2008 Hartmut Kaiser
-
- Distributed under the Boost Software License, Version 1.0. (See accompanying
- file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
-==============================================================================*/
-
-#if !defined(BOOST_SPIRIT_PRIMITIVES_APR_17_2008_0751PM)
-#define BOOST_SPIRIT_PRIMITIVES_APR_17_2008_0751PM
-
-///////////////////////////////////////////////////////////////////////////////
-namespace boost { namespace spirit { namespace qi
-{
- ///////////////////////////////////////////////////////////////////////////
- // the eol_director matches line endings
- ///////////////////////////////////////////////////////////////////////////
- struct eol_director
- {
- template <typename Component, typename Context, typename Iterator>
- struct attribute
- {
- typedef unused_type type;
- };
-
- template <
- typename Component
- , typename Iterator, typename Context
- , typename Skipper, typename Attribute>
- static bool parse(
- Component const& component
- , Iterator& first, Iterator const& last
- , Context& context, Skipper const& skipper
- , Attribute& attr)
- {
- qi::skip(first, last, skipper);
-
- bool matched = false;
- if (first != last && *first == '\r') // CR
- {
- matched = true;
- ++first;
- }
- if (first != last && *first == '\n') // LF
- {
- matched = true;
- ++first;
- }
-
- return matched;
- }
-
- template <typename Component>
- static std::string what(Component const&)
- {
- return "eol";
- }
- };
-
- ///////////////////////////////////////////////////////////////////////////
- // the eoi_director matches the end of the input
- ///////////////////////////////////////////////////////////////////////////
- struct eoi_director
- {
- template <typename Component, typename Context, typename Iterator>
- struct attribute
- {
- typedef unused_type type;
- };
-
- template <
- typename Component
- , typename Iterator, typename Context
- , typename Skipper, typename Attribute>
- static bool parse(
- Component const& component
- , Iterator& first, Iterator const& last
- , Context& context, Skipper const& skipper
- , Attribute& attr)
- {
- qi::skip(first, last, skipper);
- return first == last;
- }
-
- template <typename Component>
- static std::string what(Component const&)
- {
- return "eoi";
- }
- };
-
-///////////////////////////////////////////////////////////////////////////////
-}}}
-
-#endif
-
-

Modified: branches/doc/boost/spirit/home/qi/numeric/detail/numeric_utils.hpp
==============================================================================
--- branches/doc/boost/spirit/home/qi/numeric/detail/numeric_utils.hpp (original)
+++ branches/doc/boost/spirit/home/qi/numeric/detail/numeric_utils.hpp 2008-04-27 04:13:25 EDT (Sun, 27 Apr 2008)
@@ -316,6 +316,10 @@
>
     struct extract_int
     {
+#if BOOST_WORKAROUND(BOOST_MSVC, >= 1400)
+# pragma warning(push)
+# pragma warning(disable: 4127) // conditional expression is constant
+#endif
         template <typename Iterator, typename Attribute>
         static bool
         parse_main(
@@ -360,6 +364,9 @@
             }
             return false;
         }
+#if BOOST_WORKAROUND(BOOST_MSVC, >= 1400)
+# pragma warning(pop)
+#endif
 
         template <typename Iterator>
         static bool
@@ -401,6 +408,10 @@
     template <typename T, unsigned Radix, typename Accumulator, bool Accumulate>
     struct extract_int<T, Radix, 1, -1, Accumulator, Accumulate>
     {
+#if BOOST_WORKAROUND(BOOST_MSVC, >= 1400)
+# pragma warning(push)
+# pragma warning(disable: 4127) // conditional expression is constant
+#endif
         template <typename Iterator, typename Attribute>
         static bool
         parse_main(
@@ -460,6 +471,9 @@
             first = it;
             return true;
         }
+#if BOOST_WORKAROUND(BOOST_MSVC, >= 1400)
+# pragma warning(pop)
+#endif
 
         template <typename Iterator>
         static bool

Modified: branches/doc/boost/spirit/home/qi/numeric/detail/real_impl.hpp
==============================================================================
--- branches/doc/boost/spirit/home/qi/numeric/detail/real_impl.hpp (original)
+++ branches/doc/boost/spirit/home/qi/numeric/detail/real_impl.hpp 2008-04-27 04:13:25 EDT (Sun, 27 Apr 2008)
@@ -73,6 +73,12 @@
         }
     }
 
+#if BOOST_WORKAROUND(BOOST_MSVC, >= 1400)
+# pragma warning(push)
+# pragma warning(disable: 4100) // 'p': unreferenced formal parameter
+# pragma warning(disable: 4127) // conditional expression is constant
+#endif
+
     template <typename T, typename RealPolicies>
     struct real_impl
     {
@@ -209,6 +215,11 @@
             return true;
         }
     };
+
+#if BOOST_WORKAROUND(BOOST_MSVC, >= 1400)
+# pragma warning(pop)
+#endif
+
 }}}}
 
 #endif

Modified: branches/doc/boost/spirit/home/qi/operator/list.hpp
==============================================================================
--- branches/doc/boost/spirit/home/qi/operator/list.hpp (original)
+++ branches/doc/boost/spirit/home/qi/operator/list.hpp 2008-04-27 04:13:25 EDT (Sun, 27 Apr 2008)
@@ -48,7 +48,7 @@
 
             typename container::result_of::value<Attribute>::type val;
             if (ldirector::parse(
- left(component)
+ spirit::left(component)
                   , first, last, context, skipper, val)
                 )
             {
@@ -56,10 +56,10 @@
                 Iterator i = first;
                 while(
                     rdirector::parse(
- right(component)
+ spirit::right(component)
                       , i, last, context, skipper, unused)
                  && ldirector::parse(
- left(component)
+ spirit::left(component)
                       , i, last, context, skipper, val)
                     )
                 {

Modified: branches/doc/boost/spirit/home/qi/skip.hpp
==============================================================================
--- branches/doc/boost/spirit/home/qi/skip.hpp (original)
+++ branches/doc/boost/spirit/home/qi/skip.hpp 2008-04-27 04:13:25 EDT (Sun, 27 Apr 2008)
@@ -26,7 +26,7 @@
     }
 
     template <typename Iterator>
- inline void skip(Iterator& first, Iterator const& last, unused_type)
+ inline void skip(Iterator&, Iterator const&, unused_type)
     {
     }
 }}}

Modified: branches/doc/boost/spirit/home/qi/string/tst_map.hpp
==============================================================================
--- branches/doc/boost/spirit/home/qi/string/tst_map.hpp (original)
+++ branches/doc/boost/spirit/home/qi/string/tst_map.hpp 2008-04-27 04:13:25 EDT (Sun, 27 Apr 2008)
@@ -8,7 +8,7 @@
 #define BOOST_SPIRIT_TST_MAP_JUNE_03_2007_1143AM
 
 #include <boost/spirit/home/qi/string/detail/tst.hpp>
-#include <boost/spirit/home/support/detail/unordered_map.hpp>
+#include <boost/unordered_map.hpp>
 #include <boost/pool/object_pool.hpp>
 
 namespace boost { namespace spirit { namespace qi

Modified: branches/doc/boost/spirit/home/support/argument.hpp
==============================================================================
--- branches/doc/boost/spirit/home/support/argument.hpp (original)
+++ branches/doc/boost/spirit/home/support/argument.hpp 2008-04-27 04:13:25 EDT (Sun, 27 Apr 2008)
@@ -167,17 +167,50 @@
         }
     };
 
- namespace arg_names
+ struct lexer_state
     {
+ typedef mpl::true_ no_nullary;
 
+ template <typename Env>
+ struct result
+ {
+ typedef typename
+ mpl::at_c<typename Env::args_type, 3>::type::state_type
+ type;
+ };
+
+ template <typename Env>
+ typename result<Env>::type
+ eval(Env const& env) const
+ {
+ return fusion::at_c<3>(env.args()).state;
+ }
+ };
+
+ namespace arg_names
+ {
+ // _0 refers to the whole attribute as generated by the lhs parser
         phoenix::actor<attribute_context> const _0 = attribute_context();
-
+
+ // _1, _2, ... refer to the attributes of the single components the lhs
+ // parser is composed of
         phoenix::actor<argument<0> > const _1 = argument<0>();
         phoenix::actor<argument<1> > const _2 = argument<1>();
         phoenix::actor<argument<2> > const _3 = argument<2>();
 
+ // 'pass' may be used to make a match fail in retrospective
         phoenix::actor<phoenix::argument<2> > const pass = phoenix::argument<2>();
 
+ // 'id' may be used in a lexer semantic action to refer to the token id
+ // of a matched token
+ phoenix::actor<phoenix::argument<1> > const id = phoenix::argument<1>();
+
+ // 'state' may be used in a lexer semantic action to refer to the
+ // current lexer state
+ phoenix::actor<lexer_state> const state = lexer_state();
+
+ // _val refers to the |return| value of a rule
+ // _r0, _r1, ... refer to the rule arguments
         phoenix::actor<attribute<0> > const _val = attribute<0>();
         phoenix::actor<attribute<0> > const _r0 = attribute<0>();
         phoenix::actor<attribute<1> > const _r1 = attribute<1>();
@@ -187,6 +220,7 @@
         BOOST_PP_REPEAT_FROM_TO(
             3, SPIRIT_ARG_LIMIT, SPIRIT_DECLARE_ARG, _)
 
+ // _a, _b, ... refer to the local variables of a rule
         phoenix::actor<local_var<0> > const _a = local_var<0>();
         phoenix::actor<local_var<1> > const _b = local_var<1>();
         phoenix::actor<local_var<2> > const _c = local_var<2>();

Modified: branches/doc/boost/spirit/home/support/as_variant.hpp
==============================================================================
--- branches/doc/boost/spirit/home/support/as_variant.hpp (original)
+++ branches/doc/boost/spirit/home/support/as_variant.hpp 2008-04-27 04:13:25 EDT (Sun, 27 Apr 2008)
@@ -14,6 +14,11 @@
 #include <boost/preprocessor/repetition/enum_params_with_a_default.hpp>
 #include <boost/preprocessor/repetition/repeat_from_to.hpp>
 #include <boost/variant/variant_fwd.hpp>
+#include <boost/mpl/fold.hpp>
+#include <boost/mpl/vector.hpp>
+#include <boost/mpl/push_back.hpp>
+#include <boost/mpl/contains.hpp>
+#include <boost/type_traits/is_same.hpp>
 
 namespace boost { namespace spirit { namespace detail
 {
@@ -50,6 +55,22 @@
 #undef BOOST_FUSION_NEXT_CALL_ITERATOR
 #undef BOOST_FUSION_VALUE_OF_ITERATOR
 
+ template <typename Sequence>
+ struct generate_variant
+ {
+ // build a variant generator being able to generate a variant holding
+ // all of the types as given in the typelist
+ typedef typename
+ detail::as_variant<fusion::result_of::size<Sequence>::value>
+ gen;
+
+ // use this generator to create the actual variant
+ typedef typename gen::template apply<
+ typename fusion::result_of::begin<Sequence>::type
+ >::type
+ type;
+ };
+
 }}}
 
 namespace boost { namespace spirit
@@ -57,11 +78,25 @@
     template <typename Sequence>
     struct as_variant
     {
- typedef typename
- detail::as_variant<fusion::result_of::size<Sequence>::value>
- gen;
- typedef typename gen::
- template apply<typename fusion::result_of::begin<Sequence>::type>::type
+ // make sure each of the types occurs only once in the type list
+ typedef typename
+ mpl::fold<
+ Sequence, mpl::vector<>,
+ mpl::if_<
+ mpl::contains<mpl::_1, mpl::_2>,
+ mpl::_1, mpl::push_back<mpl::_1, mpl::_2>
+ >
+ >::type
+ new_sequence;
+
+ // if there is only one type in the list of types we strip off the
+ // variant all together
+ typedef typename
+ mpl::eval_if<
+ mpl::equal_to<mpl::size<new_sequence>, mpl::int_<1> >,
+ mpl::deref<mpl::front<Sequence> >,
+ detail::generate_variant<new_sequence>
+ >::type
         type;
     };
 }}

Modified: branches/doc/boost/spirit/home/support/detail/action_dispatch.hpp
==============================================================================
--- branches/doc/boost/spirit/home/support/detail/action_dispatch.hpp (original)
+++ branches/doc/boost/spirit/home/support/detail/action_dispatch.hpp 2008-04-27 04:13:25 EDT (Sun, 27 Apr 2008)
@@ -53,12 +53,19 @@
     template <typename RT, typename A0
       , typename Attribute, typename Context>
     bool action_dispatch(RT(*f)(A0)
- , Attribute& attr, Context& context)
+ , Attribute& attr, Context&)
     {
         f(attr);
         return true;
     }
 
+ template <typename RT, typename Attribute, typename Context>
+ bool action_dispatch(RT(*f)()
+ , Attribute&, Context&)
+ {
+ f();
+ return true;
+ }
 }}}
 
 #endif

Modified: branches/doc/boost/spirit/home/support/detail/hold_any.hpp
==============================================================================
--- branches/doc/boost/spirit/home/support/detail/hold_any.hpp (original)
+++ branches/doc/boost/spirit/home/support/detail/hold_any.hpp 2008-04-27 04:13:25 EDT (Sun, 27 Apr 2008)
@@ -27,6 +27,13 @@
 #include <iosfwd>
 
 ///////////////////////////////////////////////////////////////////////////////
+#if BOOST_WORKAROUND(BOOST_MSVC, >= 1400)
+# pragma warning(push)
+# pragma warning(disable: 4100) // 'x': unreferenced formal parameter
+# pragma warning(disable: 4127) // conditional expression is constant
+#endif
+
+///////////////////////////////////////////////////////////////////////////////
 namespace boost { namespace spirit
 {
     struct bad_any_cast
@@ -407,6 +414,12 @@
         return any_cast<nonref const&>(const_cast<hold_any &>(operand));
     }
 
-}}
+///////////////////////////////////////////////////////////////////////////////
+}} // namespace boost::spirit
+
+///////////////////////////////////////////////////////////////////////////////
+#if BOOST_WORKAROUND(BOOST_MSVC, >= 1400)
+# pragma warning(pop)
+#endif
 
 #endif

Modified: branches/doc/boost/spirit/home/support/detail/lexer/consts.hpp
==============================================================================
--- branches/doc/boost/spirit/home/support/detail/lexer/consts.hpp (original)
+++ branches/doc/boost/spirit/home/support/detail/lexer/consts.hpp 2008-04-27 04:13:25 EDT (Sun, 27 Apr 2008)
@@ -6,8 +6,9 @@
 #ifndef BOOST_LEXER_CONSTS_H
 #define BOOST_LEXER_CONSTS_H
 
-#include "size_t.hpp"
-#include <wchar.h>
+#include <boost/config.hpp>
+#include <boost/integer_traits.hpp>
+#include <boost/spirit/home/support/detail/lexer/size_t.hpp>
 
 namespace boost
 {
@@ -20,7 +21,9 @@
 
     const std::size_t max_macro_len = 20;
     const std::size_t num_chars = 256;
- const std::size_t num_wchar_ts = WCHAR_MAX < 0x110000 ? WCHAR_MAX : 0x110000;
+ const std::size_t num_wchar_ts =
+ (boost::integer_traits<wchar_t>::const_max < 0x110000) ?
+ boost::integer_traits<wchar_t>::const_max : 0x110000;
     const std::size_t null_token = static_cast<std::size_t> (~0);
     const std::size_t bol_token = static_cast<std::size_t> (~1);
     const std::size_t eol_token = static_cast<std::size_t> (~2);

Modified: branches/doc/boost/spirit/home/support/detail/lexer/generator.hpp
==============================================================================
--- branches/doc/boost/spirit/home/support/detail/lexer/generator.hpp (original)
+++ branches/doc/boost/spirit/home/support/detail/lexer/generator.hpp 2008-04-27 04:13:25 EDT (Sun, 27 Apr 2008)
@@ -6,6 +6,7 @@
 #ifndef BOOST_LEXER_GENERATOR_HPP
 #define BOOST_LEXER_GENERATOR_HPP
 
+#include <cstring> // memcmp
 #include "char_traits.hpp"
 #include "partition/charset.hpp"
 #include "partition/equivset.hpp"
@@ -754,7 +755,8 @@
                     continue;
                 }
 
- if (::memcmp (first_, second_, sizeof(std::size_t) *
+ using namespace std; // some systems have memcmp in namespace std
+ if (memcmp (first_, second_, sizeof(std::size_t) *
                     dfa_alphabet_) == 0)
                 {
                     index_set_.insert (curr_index_);

Modified: branches/doc/boost/spirit/home/support/detail/lexer/parser/parser.hpp
==============================================================================
--- branches/doc/boost/spirit/home/support/detail/lexer/parser/parser.hpp (original)
+++ branches/doc/boost/spirit/home/support/detail/lexer/parser/parser.hpp 2008-04-27 04:13:25 EDT (Sun, 27 Apr 2008)
@@ -243,7 +243,7 @@
         node_ptr_vector &node_ptr_vector_, tree_node_stack &tree_node_stack_)
     {
         assert (handle_.top ()._type == token::SUB &&
- handle_.size () == 1 || handle_.size () == 2);
+ (handle_.size () == 1 || handle_.size () == 2));
 
         if (handle_.size () == 1)
         {
@@ -262,7 +262,7 @@
     static void repeat (token_stack &handle_, token_stack &token_stack_)
     {
         assert (handle_.top ()._type == token::REPEAT &&
- handle_.size () >= 1 && handle_.size () <= 3);
+ (handle_.size () >= 1 && handle_.size () <= 3));
 
         if (handle_.size () == 1)
         {

Modified: branches/doc/boost/spirit/home/support/detail/lexer/parser/tokeniser/num_token.hpp
==============================================================================
--- branches/doc/boost/spirit/home/support/detail/lexer/parser/tokeniser/num_token.hpp (original)
+++ branches/doc/boost/spirit/home/support/detail/lexer/parser/tokeniser/num_token.hpp 2008-04-27 04:13:25 EDT (Sun, 27 Apr 2008)
@@ -122,9 +122,12 @@
 
 template<typename CharT>
 const char *basic_num_token<CharT>::_precedence_strings[END + 1] =
-{"BEGIN", "REGEX", "OREXP", "SEQUENCE", "SUB", "EXPRESSION", "REPEAT",
- "DUPLICATE", "|", "CHARSET", "MACRO", "(", ")", "?", "*", "+",
- "{n[,[m]]}", "END"};
+{
+ {"BEGIN"}, {"REGEX"}, {"OREXP"}, {"SEQUENCE"}, {"SUB"}, {"EXPRESSION"},
+ {"REPEAT"}, {"DUPLICATE"}, {"|"}, {"CHARSET"}, {"MACRO"},
+ {"("}, {")"}, {"?"}, {"*"}, {"+"}, {"{n[,[m]]}"}, {"END"}
+};
+
 }
 }
 }

Modified: branches/doc/boost/spirit/home/support/detail/lexer/parser/tokeniser/re_tokeniser.hpp
==============================================================================
--- branches/doc/boost/spirit/home/support/detail/lexer/parser/tokeniser/re_tokeniser.hpp (original)
+++ branches/doc/boost/spirit/home/support/detail/lexer/parser/tokeniser/re_tokeniser.hpp 2008-04-27 04:13:25 EDT (Sun, 27 Apr 2008)
@@ -7,6 +7,7 @@
 #define BOOST_LEXER_RE_TOKENISER_HPP
 
 #include <map>
+#include <cstring> // memcpy
 #include "num_token.hpp"
 #include "../../runtime_error.hpp"
 #include "../../size_t.hpp"
@@ -390,8 +391,8 @@
                 throw runtime_error ("Unexpected end of regex "
                     "(missing '}').");
             }
- } while (ch_ == '_' || ch_ == '-' || ch_ >= 'A' && ch_ <= 'Z' ||
- ch_ >= 'a' && ch_ <= 'z' || ch_ >= '0' && ch_ <= '9');
+ } while (ch_ == '_' || ch_ == '-' || (ch_ >= 'A' && ch_ <= 'Z') ||
+ (ch_ >= 'a' && ch_ <= 'z') || (ch_ >= '0' && ch_ <= '9'));
 
         if (ch_ != '}')
         {
@@ -421,7 +422,8 @@
         }
 
         token_.set (num_token::MACRO, null_token);
- ::memcpy (token_._macro, start_, len_ * sizeof(CharT));
+ using namespace std; // some systems have memcpy in namespace std
+ memcpy (token_._macro, start_, len_ * sizeof(CharT));
         token_._macro[len_] = 0;
     }
 };

Modified: branches/doc/boost/spirit/home/support/detail/lexer/parser/tokeniser/re_tokeniser_helper.hpp
==============================================================================
--- branches/doc/boost/spirit/home/support/detail/lexer/parser/tokeniser/re_tokeniser_helper.hpp (original)
+++ branches/doc/boost/spirit/home/support/detail/lexer/parser/tokeniser/re_tokeniser_helper.hpp 2008-04-27 04:13:25 EDT (Sun, 27 Apr 2008)
@@ -6,6 +6,8 @@
 #ifndef BOOST_LEXER_RE_TOKENISER_HELPER_H
 #define BOOST_LEXER_RE_TOKENISER_HELPER_H
 
+#include <cstring> // for strlen
+
 #include "../../char_traits.hpp"
 #include "../../size_t.hpp"
 #include "re_tokeniser_state.hpp"
@@ -190,6 +192,7 @@
 
         if (str_)
         {
+ using namespace std; // some systems have strlen in namespace std
             str_len_ = strlen (str_);
         }
         else
@@ -229,6 +232,7 @@
 
         if (str_)
         {
+ using namespace std; // some systems have wcslen in namespace std
             str_len_ = wcslen (str_);
         }
         else

Modified: branches/doc/boost/spirit/home/support/detail/lexer/string_token.hpp
==============================================================================
--- branches/doc/boost/spirit/home/support/detail/lexer/string_token.hpp (original)
+++ branches/doc/boost/spirit/home/support/detail/lexer/string_token.hpp 2008-04-27 04:13:25 EDT (Sun, 27 Apr 2008)
@@ -135,7 +135,7 @@
 
     void intersect (basic_string_token &rhs_, basic_string_token &overlap_)
     {
- if (any () && rhs_.any () || (_negated == rhs_._negated &&
+ if ((any () && rhs_.any ()) || (_negated == rhs_._negated &&
             !any () && !rhs_.any ()))
         {
             intersect_same_types (rhs_, overlap_);

Deleted: branches/doc/boost/spirit/home/support/detail/unordered_map.hpp
==============================================================================
--- branches/doc/boost/spirit/home/support/detail/unordered_map.hpp 2008-04-27 04:13:25 EDT (Sun, 27 Apr 2008)
+++ (empty file)
@@ -1,660 +0,0 @@
-
-// Copyright (C) 2003-2004 Jeremy B. Maitin-Shepard.
-// Copyright (C) 2005-2006 Daniel James.
-// Distributed under the Boost Software License, Version 1.0. (See accompanying
-// file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
-
-#ifndef BOOST_UNORDERED_MAP_HPP_INCLUDED
-#define BOOST_UNORDERED_MAP_HPP_INCLUDED
-
-#if defined(_MSC_VER) && (_MSC_VER >= 1020)
-# pragma once
-#endif
-
-#include <boost/config.hpp>
-
-#include <functional>
-#include <memory>
-
-#include <boost/spirit/home/support/detail/unordered/detail/hash_table.hpp>
-#include <boost/functional/hash.hpp>
-
-namespace boost
-{
- template <class Key,
- class T,
- class Hash = hash<Key>,
- class Pred = std::equal_to<Key>,
- class Alloc = std::allocator<std::pair<const Key, T> > >
- class unordered_map
- {
- typedef boost::unordered_detail::hash_types_unique_keys<
- std::pair<const Key, T>, Key, Hash, Pred, Alloc
- > implementation;
-
- typename implementation::hash_table base;
-
- public:
-
- // types
-
- typedef Key key_type;
- typedef std::pair<const Key, T> value_type;
- typedef T mapped_type;
- typedef Hash hasher;
- typedef Pred key_equal;
-
- typedef Alloc allocator_type;
- typedef typename allocator_type::pointer pointer;
- typedef typename allocator_type::const_pointer const_pointer;
- typedef typename allocator_type::reference reference;
- typedef typename allocator_type::const_reference const_reference;
-
- typedef typename implementation::size_type size_type;
- typedef typename implementation::difference_type difference_type;
-
- typedef typename implementation::iterator iterator;
- typedef typename implementation::const_iterator const_iterator;
- typedef typename implementation::local_iterator local_iterator;
- typedef typename implementation::const_local_iterator const_local_iterator;
-
- // construct/destroy/copy
-
- explicit unordered_map(
- size_type n = boost::unordered_detail::default_initial_bucket_count,
- const hasher &hf = hasher(),
- const key_equal &eql = key_equal(),
- const allocator_type &a = allocator_type())
- : base(n, hf, eql, a)
- {
- }
-
- template <class InputIterator>
- unordered_map(InputIterator f, InputIterator l)
- : base(f, l, boost::unordered_detail::default_initial_bucket_count,
- hasher(), key_equal(), allocator_type())
- {
- }
-
- template <class InputIterator>
- unordered_map(InputIterator f, InputIterator l,
- size_type n,
- const hasher &hf = hasher(),
- const key_equal &eql = key_equal(),
- const allocator_type &a = allocator_type())
- : base(f, l, n, hf, eql, a)
- {
- }
-
- private:
-
- typename implementation::iterator_base const&
- get(const_iterator const& it)
- {
- return boost::unordered_detail::iterator_access::get(it);
- }
-
- public:
-
- allocator_type get_allocator() const
- {
- return base.get_allocator();
- }
-
- // size and capacity
-
- bool empty() const
- {
- return base.empty();
- }
-
- size_type size() const
- {
- return base.size();
- }
-
- size_type max_size() const
- {
- return base.max_size();
- }
-
- // iterators
-
- iterator begin()
- {
- return iterator(base.begin());
- }
-
- const_iterator begin() const
- {
- return const_iterator(base.begin());
- }
-
- iterator end()
- {
- return iterator(base.end());
- }
-
- const_iterator end() const
- {
- return const_iterator(base.end());
- }
-
- const_iterator cbegin() const
- {
- return const_iterator(base.begin());
- }
-
- const_iterator cend() const
- {
- return const_iterator(base.end());
- }
-
- // modifiers
-
- std::pair<iterator, bool> insert(const value_type& obj)
- {
- return boost::unordered_detail::pair_cast<iterator, bool>(
- base.insert(obj));
- }
-
- iterator insert(iterator hint, const value_type& obj)
- {
- return iterator(base.insert(get(hint), obj));
- }
-
- const_iterator insert(const_iterator hint, const value_type& obj)
- {
- return const_iterator(base.insert(get(hint), obj));
- }
-
- template <class InputIterator>
- void insert(InputIterator first, InputIterator last)
- {
- base.insert(first, last);
- }
-
- iterator erase(iterator position)
- {
- return iterator(base.erase(get(position)));
- }
-
- const_iterator erase(const_iterator position)
- {
- return const_iterator(base.erase(get(position)));
- }
-
- size_type erase(const key_type& k)
- {
- return base.erase(k);
- }
-
- iterator erase(iterator first, iterator last)
- {
- return iterator(base.erase(get(first), get(last)));
- }
-
- const_iterator erase(const_iterator first, const_iterator last)
- {
- return const_iterator(base.erase(get(first), get(last)));
- }
-
- void clear()
- {
- base.clear();
- }
-
- void swap(unordered_map& other)
- {
- base.swap(other.base);
- }
-
- // observers
-
- hasher hash_function() const
- {
- return base.hash_function();
- }
-
- key_equal key_eq() const
- {
- return base.key_eq();
- }
-
- mapped_type& operator[](const key_type &k)
- {
- return base[k].second;
- }
-
- // lookup
-
- iterator find(const key_type& k)
- {
- return iterator(base.find(k));
- }
-
- const_iterator find(const key_type& k) const
- {
- return const_iterator(base.find(k));
- }
-
- size_type count(const key_type& k) const
- {
- return base.count(k);
- }
-
- std::pair<iterator, iterator>
- equal_range(const key_type& k)
- {
- return boost::unordered_detail::pair_cast<iterator, iterator>(
- base.equal_range(k));
- }
-
- std::pair<const_iterator, const_iterator>
- equal_range(const key_type& k) const
- {
- return boost::unordered_detail::pair_cast<const_iterator, const_iterator>(
- base.equal_range(k));
- }
-
- // bucket interface
-
- size_type bucket_count() const
- {
- return base.bucket_count();
- }
-
- size_type max_bucket_count() const
- {
- return base.max_bucket_count();
- }
-
- size_type bucket_size(size_type n) const
- {
- return base.bucket_size(n);
- }
-
- size_type bucket(const key_type& k) const
- {
- return base.bucket(k);
- }
-
- local_iterator begin(size_type n)
- {
- return local_iterator(base.begin(n));
- }
-
- const_local_iterator begin(size_type n) const
- {
- return const_local_iterator(base.begin(n));
- }
-
- local_iterator end(size_type n)
- {
- return local_iterator(base.end(n));
- }
-
- const_local_iterator end(size_type n) const
- {
- return const_local_iterator(base.end(n));
- }
-
-#if defined(BOOST_UNORDERED_LOCAL_CBEGIN)
- const_local_iterator cbegin(size_type n) const
- {
- return const_local_iterator(base.begin(n));
- }
-
- const_local_iterator cend(size_type n) const
- {
- return const_local_iterator(base.end(n));
- }
-#endif
-
- // hash policy
-
- float load_factor() const
- {
- return base.load_factor();
- }
-
- float max_load_factor() const
- {
- return base.max_load_factor();
- }
-
- void max_load_factor(float m)
- {
- base.max_load_factor(m);
- }
-
- void rehash(size_type n)
- {
- base.rehash(n);
- }
- }; // class template unordered_map
-
- template <class K, class T, class H, class P, class A>
- void swap(unordered_map<K, T, H, P, A> &m1,
- unordered_map<K, T, H, P, A> &m2)
- {
- m1.swap(m2);
- }
-
- template <class Key,
- class T,
- class Hash = hash<Key>,
- class Pred = std::equal_to<Key>,
- class Alloc = std::allocator<std::pair<const Key, T> > >
- class unordered_multimap
- {
- typedef boost::unordered_detail::hash_types_equivalent_keys<
- std::pair<const Key, T>, Key, Hash, Pred, Alloc
- > implementation;
-
- typename implementation::hash_table base;
-
- public:
-
- // types
-
- typedef Key key_type;
- typedef std::pair<const Key, T> value_type;
- typedef T mapped_type;
- typedef Hash hasher;
- typedef Pred key_equal;
-
- typedef Alloc allocator_type;
- typedef typename allocator_type::pointer pointer;
- typedef typename allocator_type::const_pointer const_pointer;
- typedef typename allocator_type::reference reference;
- typedef typename allocator_type::const_reference const_reference;
-
- typedef typename implementation::size_type size_type;
- typedef typename implementation::difference_type difference_type;
-
- typedef typename implementation::iterator iterator;
- typedef typename implementation::const_iterator const_iterator;
- typedef typename implementation::local_iterator local_iterator;
- typedef typename implementation::const_local_iterator const_local_iterator;
-
- // construct/destroy/copy
-
- explicit unordered_multimap(
- size_type n = boost::unordered_detail::default_initial_bucket_count,
- const hasher &hf = hasher(),
- const key_equal &eql = key_equal(),
- const allocator_type &a = allocator_type())
- : base(n, hf, eql, a)
- {
- }
-
- template <class InputIterator>
- unordered_multimap(InputIterator f, InputIterator l)
- : base(f, l, boost::unordered_detail::default_initial_bucket_count,
- hasher(), key_equal(), allocator_type())
- {
- }
-
- template <class InputIterator>
- unordered_multimap(InputIterator f, InputIterator l,
- size_type n,
- const hasher &hf = hasher(),
- const key_equal &eql = key_equal(),
- const allocator_type &a = allocator_type())
- : base(f, l, n, hf, eql, a)
- {
- }
-
- private:
-
- typename implementation::iterator_base const&
- get(const_iterator const& it)
- {
- return boost::unordered_detail::iterator_access::get(it);
- }
-
- public:
-
- allocator_type get_allocator() const
- {
- return base.get_allocator();
- }
-
- // size and capacity
-
- bool empty() const
- {
- return base.empty();
- }
-
- size_type size() const
- {
- return base.size();
- }
-
- size_type max_size() const
- {
- return base.max_size();
- }
-
- // iterators
-
- iterator begin()
- {
- return iterator(base.begin());
- }
-
- const_iterator begin() const
- {
- return const_iterator(base.begin());
- }
-
- iterator end()
- {
- return iterator(base.end());
- }
-
- const_iterator end() const
- {
- return const_iterator(base.end());
- }
-
- const_iterator cbegin() const
- {
- return const_iterator(base.begin());
- }
-
- const_iterator cend() const
- {
- return const_iterator(base.end());
- }
-
- // modifiers
-
- iterator insert(const value_type& obj)
- {
- return iterator(base.insert(obj));
- }
-
- iterator insert(iterator hint, const value_type& obj)
- {
- return iterator(base.insert(get(hint), obj));
- }
-
- const_iterator insert(const_iterator hint, const value_type& obj)
- {
- return const_iterator(base.insert(get(hint), obj));
- }
-
- template <class InputIterator>
- void insert(InputIterator first, InputIterator last)
- {
- base.insert(first, last);
- }
-
- iterator erase(iterator position)
- {
- return iterator(base.erase(get(position)));
- }
-
- const_iterator erase(const_iterator position)
- {
- return const_iterator(base.erase(get(position)));
- }
-
- size_type erase(const key_type& k)
- {
- return base.erase(k);
- }
-
- iterator erase(iterator first, iterator last)
- {
- return iterator(base.erase(get(first), get(last)));
- }
-
- const_iterator erase(const_iterator first, const_iterator last)
- {
- return const_iterator(base.erase(get(first), get(last)));
- }
-
- void clear()
- {
- base.clear();
- }
-
- void swap(unordered_multimap& other)
- {
- base.swap(other.base);
- }
-
- // observers
-
- hasher hash_function() const
- {
- return base.hash_function();
- }
-
- key_equal key_eq() const
- {
- return base.key_eq();
- }
-
- // lookup
-
- iterator find(const key_type& k)
- {
- return iterator(base.find(k));
- }
-
- const_iterator find(const key_type& k) const
- {
- return const_iterator(base.find(k));
- }
-
- size_type count(const key_type& k) const
- {
- return base.count(k);
- }
-
- std::pair<iterator, iterator>
- equal_range(const key_type& k)
- {
- return boost::unordered_detail::pair_cast<iterator, iterator>(
- base.equal_range(k));
- }
-
- std::pair<const_iterator, const_iterator>
- equal_range(const key_type& k) const
- {
- return boost::unordered_detail::pair_cast<const_iterator, const_iterator>(
- base.equal_range(k));
- }
-
- // bucket interface
-
- size_type bucket_count() const
- {
- return base.bucket_count();
- }
-
- size_type max_bucket_count() const
- {
- return base.max_bucket_count();
- }
-
- size_type bucket_size(size_type n) const
- {
- return base.bucket_size(n);
- }
-
- size_type bucket(const key_type& k) const
- {
- return base.bucket(k);
- }
-
- local_iterator begin(size_type n)
- {
- return local_iterator(base.begin(n));
- }
-
- const_local_iterator begin(size_type n) const
- {
- return const_local_iterator(base.begin(n));
- }
-
- local_iterator end(size_type n)
- {
- return local_iterator(base.end(n));
- }
-
- const_local_iterator end(size_type n) const
- {
- return const_local_iterator(base.end(n));
- }
-
-#if defined(BOOST_UNORDERED_LOCAL_CBEGIN)
- const_local_iterator cbegin(size_type n) const
- {
- return const_local_iterator(base.begin(n));
- }
-
- const_local_iterator cend(size_type n) const
- {
- return const_local_iterator(base.end(n));
- }
-#endif
-
- // hash policy
-
- float load_factor() const
- {
- return base.load_factor();
- }
-
- float max_load_factor() const
- {
- return base.max_load_factor();
- }
-
- void max_load_factor(float m)
- {
- base.max_load_factor(m);
- }
-
- void rehash(size_type n)
- {
- base.rehash(n);
- }
- }; // class template unordered_multimap
-
- template <class K, class T, class H, class P, class A>
- void swap(unordered_multimap<K, T, H, P, A> &m1,
- unordered_multimap<K, T, H, P, A> &m2)
- {
- m1.swap(m2);
- }
-
-} // namespace boost
-
-#endif // BOOST_UNORDERED_MAP_HPP_INCLUDED

Deleted: branches/doc/boost/spirit/home/support/detail/unordered_set.hpp
==============================================================================
--- branches/doc/boost/spirit/home/support/detail/unordered_set.hpp 2008-04-27 04:13:25 EDT (Sun, 27 Apr 2008)
+++ (empty file)
@@ -1,595 +0,0 @@
-
-// Copyright (C) 2003-2004 Jeremy B. Maitin-Shepard.
-// Copyright (C) 2005-2006 Daniel James.
-// Distributed under the Boost Software License, Version 1.0. (See accompanying
-// file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
-
-#ifndef BOOST_UNORDERED_SET_HPP_INCLUDED
-#define BOOST_UNORDERED_SET_HPP_INCLUDED
-
-#if defined(_MSC_VER) && (_MSC_VER >= 1020)
-# pragma once
-#endif
-
-#include <boost/config.hpp>
-
-#include <functional>
-#include <memory>
-
-#include <spirit/support/detail/unordered/detail/hash_table.hpp>
-#include <boost/functional/hash.hpp>
-
-namespace boost
-{
- template <class Value,
- class Hash = hash<Value>,
- class Pred = std::equal_to<Value>,
- class Alloc = std::allocator<Value> >
- class unordered_set
- {
- typedef boost::unordered_detail::hash_types_unique_keys<
- Value, Value, Hash, Pred, Alloc
- > implementation;
-
- typename implementation::hash_table base;
-
- public:
-
- // types
-
- typedef Value key_type;
- typedef Value value_type;
- typedef Hash hasher;
- typedef Pred key_equal;
-
- typedef Alloc allocator_type;
- typedef typename allocator_type::pointer pointer;
- typedef typename allocator_type::const_pointer const_pointer;
- typedef typename allocator_type::reference reference;
- typedef typename allocator_type::const_reference const_reference;
-
- typedef typename implementation::size_type size_type;
- typedef typename implementation::difference_type difference_type;
-
- typedef typename implementation::const_iterator iterator;
- typedef typename implementation::const_iterator const_iterator;
- typedef typename implementation::const_local_iterator local_iterator;
- typedef typename implementation::const_local_iterator const_local_iterator;
-
- // construct/destroy/copy
-
- explicit unordered_set(
- size_type n = boost::unordered_detail::default_initial_bucket_count,
- const hasher &hf = hasher(),
- const key_equal &eql = key_equal(),
- const allocator_type &a = allocator_type())
- : base(n, hf, eql, a)
- {
- }
-
- template <class InputIterator>
- unordered_set(InputIterator f, InputIterator l)
- : base(f, l, boost::unordered_detail::default_initial_bucket_count,
- hasher(), key_equal(), allocator_type())
- {
- }
-
- template <class InputIterator>
- unordered_set(InputIterator f, InputIterator l, size_type n,
- const hasher &hf = hasher(),
- const key_equal &eql = key_equal(),
- const allocator_type &a = allocator_type())
- : base(f, l, n, hf, eql, a)
- {
- }
-
- private:
-
- typename implementation::iterator_base const&
- get(const_iterator const& it)
- {
- return boost::unordered_detail::iterator_access::get(it);
- }
-
- public:
-
- allocator_type get_allocator() const
- {
- return base.get_allocator();
- }
-
- // size and capacity
-
- bool empty() const
- {
- return base.empty();
- }
-
- size_type size() const
- {
- return base.size();
- }
-
- size_type max_size() const
- {
- return base.max_size();
- }
-
- // iterators
-
- iterator begin()
- {
- return iterator(base.begin());
- }
-
- const_iterator begin() const
- {
- return const_iterator(base.begin());
- }
-
- iterator end()
- {
- return iterator(base.end());
- }
-
- const_iterator end() const
- {
- return const_iterator(base.end());
- }
-
- const_iterator cbegin() const
- {
- return const_iterator(base.begin());
- }
-
- const_iterator cend() const
- {
- return const_iterator(base.end());
- }
-
- // modifiers
-
- std::pair<iterator, bool> insert(const value_type& obj)
- {
- return boost::unordered_detail::pair_cast<iterator, bool>(
- base.insert(obj));
- }
-
- const_iterator insert(const_iterator hint, const value_type& obj)
- {
- return const_iterator(base.insert(get(hint), obj));
- }
-
- template <class InputIterator>
- void insert(InputIterator first, InputIterator last)
- {
- base.insert(first, last);
- }
-
- const_iterator erase(const_iterator position)
- {
- return const_iterator(base.erase(get(position)));
- }
-
- size_type erase(const key_type& k)
- {
- return base.erase(k);
- }
-
- const_iterator erase(const_iterator first, const_iterator last)
- {
- return const_iterator(base.erase(get(first), get(last)));
- }
-
- void clear()
- {
- base.clear();
- }
-
- void swap(unordered_set& other)
- {
- base.swap(other.base);
- }
-
- // observers
-
- hasher hash_function() const
- {
- return base.hash_function();
- }
-
- key_equal key_eq() const
- {
- return base.key_eq();
- }
-
- // lookup
-
- const_iterator find(const key_type& k) const
- {
- return const_iterator(base.find(k));
- }
-
- size_type count(const key_type& k) const
- {
- return base.count(k);
- }
-
- std::pair<const_iterator, const_iterator>
- equal_range(const key_type& k) const
- {
- return boost::unordered_detail::pair_cast<const_iterator, const_iterator>(
- base.equal_range(k));
- }
-
- // bucket interface
-
- size_type bucket_count() const
- {
- return base.bucket_count();
- }
-
- size_type max_bucket_count() const
- {
- return base.max_bucket_count();
- }
-
- size_type bucket_size(size_type n) const
- {
- return base.bucket_size(n);
- }
-
- size_type bucket(const key_type& k) const
- {
- return base.bucket(k);
- }
-
- local_iterator begin(size_type n)
- {
- return local_iterator(base.begin(n));
- }
-
- const_local_iterator begin(size_type n) const
- {
- return const_local_iterator(base.begin(n));
- }
-
- local_iterator end(size_type n)
- {
- return local_iterator(base.end(n));
- }
-
- const_local_iterator end(size_type n) const
- {
- return const_local_iterator(base.end(n));
- }
-
-#if defined(BOOST_UNORDERED_LOCAL_CBEGIN)
- const_local_iterator cbegin(size_type n) const
- {
- return const_local_iterator(base.begin(n));
- }
-
- const_local_iterator cend(size_type n) const
- {
- return const_local_iterator(base.end(n));
- }
-#endif
-
- // hash policy
-
- float load_factor() const
- {
- return base.load_factor();
- }
-
- float max_load_factor() const
- {
- return base.max_load_factor();
- }
-
- void max_load_factor(float m)
- {
- base.max_load_factor(m);
- }
-
- void rehash(size_type n)
- {
- base.rehash(n);
- }
- }; // class template unordered_set
-
- template <class T, class H, class P, class A>
- void swap(unordered_set<T, H, P, A> &m1,
- unordered_set<T, H, P, A> &m2)
- {
- m1.swap(m2);
- }
-
- template <class Value,
- class Hash = hash<Value>,
- class Pred = std::equal_to<Value>,
- class Alloc = std::allocator<Value> >
- class unordered_multiset
- {
- typedef boost::unordered_detail::hash_types_equivalent_keys<
- Value, Value, Hash, Pred, Alloc
- > implementation;
-
- typename implementation::hash_table base;
-
- public:
-
- //types
-
- typedef Value key_type;
- typedef Value value_type;
- typedef Hash hasher;
- typedef Pred key_equal;
-
- typedef Alloc allocator_type;
- typedef typename allocator_type::pointer pointer;
- typedef typename allocator_type::const_pointer const_pointer;
- typedef typename allocator_type::reference reference;
- typedef typename allocator_type::const_reference const_reference;
-
- typedef typename implementation::size_type size_type;
- typedef typename implementation::difference_type difference_type;
-
- typedef typename implementation::const_iterator iterator;
- typedef typename implementation::const_iterator const_iterator;
- typedef typename implementation::const_local_iterator local_iterator;
- typedef typename implementation::const_local_iterator const_local_iterator;
-
- // construct/destroy/copy
-
- explicit unordered_multiset(
- size_type n = boost::unordered_detail::default_initial_bucket_count,
- const hasher &hf = hasher(),
- const key_equal &eql = key_equal(),
- const allocator_type &a = allocator_type())
- : base(n, hf, eql, a)
- {
- }
-
- template <class InputIterator>
- unordered_multiset(InputIterator f, InputIterator l)
- : base(f, l, boost::unordered_detail::default_initial_bucket_count,
- hasher(), key_equal(), allocator_type())
- {
- }
-
- template <class InputIterator>
- unordered_multiset(InputIterator f, InputIterator l, size_type n,
- const hasher &hf = hasher(),
- const key_equal &eql = key_equal(),
- const allocator_type &a = allocator_type())
- : base(f, l, n, hf, eql, a)
- {
- }
-
- private:
-
- typename implementation::iterator_base const&
- get(const_iterator const& it)
- {
- return boost::unordered_detail::iterator_access::get(it);
- }
-
- public:
-
- allocator_type get_allocator() const
- {
- return base.get_allocator();
- }
-
- // size and capacity
-
- bool empty() const
- {
- return base.empty();
- }
-
- size_type size() const
- {
- return base.size();
- }
-
- size_type max_size() const
- {
- return base.max_size();
- }
-
- // iterators
-
- iterator begin()
- {
- return iterator(base.begin());
- }
-
- const_iterator begin() const
- {
- return const_iterator(base.begin());
- }
-
- iterator end()
- {
- return iterator(base.end());
- }
-
- const_iterator end() const
- {
- return const_iterator(base.end());
- }
-
- const_iterator cbegin() const
- {
- return const_iterator(base.begin());
- }
-
- const_iterator cend() const
- {
- return const_iterator(base.end());
- }
-
- // modifiers
-
- iterator insert(const value_type& obj)
- {
- return iterator(base.insert(obj));
- }
-
- const_iterator insert(const_iterator hint, const value_type& obj)
- {
- return const_iterator(base.insert(get(hint), obj));
- }
-
- template <class InputIterator>
- void insert(InputIterator first, InputIterator last)
- {
- base.insert(first, last);
- }
-
- const_iterator erase(const_iterator position)
- {
- return const_iterator(base.erase(get(position)));
- }
-
- size_type erase(const key_type& k)
- {
- return base.erase(k);
- }
-
- const_iterator erase(const_iterator first, const_iterator last)
- {
- return const_iterator(base.erase(get(first), get(last)));
- }
-
- void clear()
- {
- base.clear();
- }
-
- void swap(unordered_multiset& other)
- {
- base.swap(other.base);
- }
-
- // observers
-
- hasher hash_function() const
- {
- return base.hash_function();
- }
-
- key_equal key_eq() const
- {
- return base.key_eq();
- }
-
- // lookup
-
- const_iterator find(const key_type& k) const
- {
- return const_iterator(base.find(k));
- }
-
- size_type count(const key_type& k) const
- {
- return base.count(k);
- }
-
- std::pair<const_iterator, const_iterator>
- equal_range(const key_type& k) const
- {
- return boost::unordered_detail::pair_cast<const_iterator, const_iterator>(
- base.equal_range(k));
- }
-
- // bucket interface
-
- size_type bucket_count() const
- {
- return base.bucket_count();
- }
-
- size_type max_bucket_count() const
- {
- return base.max_bucket_count();
- }
-
- size_type bucket_size(size_type n) const
- {
- return base.bucket_size(n);
- }
-
- size_type bucket(const key_type& k) const
- {
- return base.bucket(k);
- }
-
- local_iterator begin(size_type n)
- {
- return local_iterator(base.begin(n));
- }
-
- const_local_iterator begin(size_type n) const
- {
- return const_local_iterator(base.begin(n));
- }
-
- local_iterator end(size_type n)
- {
- return local_iterator(base.end(n));
- }
-
- const_local_iterator end(size_type n) const
- {
- return const_local_iterator(base.end(n));
- }
-
-#if defined(BOOST_UNORDERED_LOCAL_CBEGIN)
- const_local_iterator cbegin(size_type n) const
- {
- return const_local_iterator(base.begin(n));
- }
-
- const_local_iterator cend(size_type n) const
- {
- return const_local_iterator(base.end(n));
- }
-#endif
-
- // hash policy
-
- float load_factor() const
- {
- return base.load_factor();
- }
-
- float max_load_factor() const
- {
- return base.max_load_factor();
- }
-
- void max_load_factor(float m)
- {
- base.max_load_factor(m);
- }
-
- void rehash(size_type n)
- {
- base.rehash(n);
- }
- }; // class template unordered_multiset
-
- template <class T, class H, class P, class A>
- void swap(unordered_multiset<T, H, P, A> &m1,
- unordered_multiset<T, H, P, A> &m2)
- {
- m1.swap(m2);
- }
-
-} // namespace boost
-
-#endif // BOOST_UNORDERED_SET_HPP_INCLUDED

Modified: branches/doc/boost/spirit/home/support/iterators/detail/buf_id_check_policy.hpp
==============================================================================
--- branches/doc/boost/spirit/home/support/iterators/detail/buf_id_check_policy.hpp (original)
+++ branches/doc/boost/spirit/home/support/iterators/detail/buf_id_check_policy.hpp 2008-04-27 04:13:25 EDT (Sun, 27 Apr 2008)
@@ -76,7 +76,7 @@
             }
 
             template <typename MultiPass>
- static void destroy(MultiPass& mp)
+ static void destroy(MultiPass&)
             {}
 
         protected:

Modified: branches/doc/boost/spirit/home/support/iterators/detail/combine_policies.hpp
==============================================================================
--- branches/doc/boost/spirit/home/support/iterators/detail/combine_policies.hpp (original)
+++ branches/doc/boost/spirit/home/support/iterators/detail/combine_policies.hpp 2008-04-27 04:13:25 EDT (Sun, 27 Apr 2008)
@@ -344,7 +344,7 @@
       : Storage
     {
         multi_pass_unique() {}
- multi_pass_unique(T const& /*x*/) {}
+ multi_pass_unique(T const&) {}
 
         template <typename MultiPass>
         static void destroy(MultiPass& mp)
@@ -414,8 +414,7 @@
     // multi_pass template, combining 4 separate policies into one. Any other
     // multi_pass policy class needs to follow the scheme as shown below.
     template<
- typename Input, typename Ownership, typename Checking,
- typename Storage
+ typename Ownership, typename Checking, typename Input, typename Storage
>
     struct default_policy
     {

Modified: branches/doc/boost/spirit/home/support/iterators/detail/first_owner_policy.hpp
==============================================================================
--- branches/doc/boost/spirit/home/support/iterators/detail/first_owner_policy.hpp (original)
+++ branches/doc/boost/spirit/home/support/iterators/detail/first_owner_policy.hpp 2008-04-27 04:13:25 EDT (Sun, 27 Apr 2008)
@@ -49,7 +49,7 @@
             // to, so don't swap first_. swap is only called from operator=
 
             template <typename MultiPass>
- static bool is_unique(MultiPass const& mp)
+ static bool is_unique(MultiPass const&)
             {
                 return false; // no way to know, so always return false
             }

Modified: branches/doc/boost/spirit/home/support/iterators/detail/input_iterator_policy.hpp
==============================================================================
--- branches/doc/boost/spirit/home/support/iterators/detail/input_iterator_policy.hpp (original)
+++ branches/doc/boost/spirit/home/support/iterators/detail/input_iterator_policy.hpp 2008-04-27 04:13:25 EDT (Sun, 27 Apr 2008)
@@ -77,7 +77,7 @@
 
             // test, whether we reached the end of the underlying stream
             template <typename MultiPass>
- static bool input_at_eof(MultiPass const& mp, value_type const& t)
+ static bool input_at_eof(MultiPass const& mp, value_type const&)
             {
                 return mp.input == T();
             }
@@ -97,7 +97,7 @@
         template <typename T>
         struct shared
         {
- explicit shared(T x) {}
+ explicit shared(T) {}
 
             // no shared data elements
         };

Modified: branches/doc/boost/spirit/home/support/iterators/detail/lex_input_policy.hpp
==============================================================================
--- branches/doc/boost/spirit/home/support/iterators/detail/lex_input_policy.hpp (original)
+++ branches/doc/boost/spirit/home/support/iterators/detail/lex_input_policy.hpp 2008-04-27 04:13:25 EDT (Sun, 27 Apr 2008)
@@ -33,7 +33,7 @@
 
         protected:
             unique() {}
- explicit unique(T x) {}
+ explicit unique(T) {}
 
         public:
             template <typename MultiPass>
@@ -51,13 +51,13 @@
 
             // test, whether we reached the end of the underlying stream
             template <typename MultiPass>
- static bool input_at_eof(MultiPass const& mp, value_type const& t)
+ static bool input_at_eof(MultiPass const&, value_type const& t)
             {
                 return 0 == t;
             }
 
             template <typename MultiPass>
- static bool input_is_valid(MultiPass const& mp, value_type const& t)
+ static bool input_is_valid(MultiPass const&, value_type const& t)
             {
                 return -1 != t;
             }
@@ -67,7 +67,7 @@
         template <typename T>
         struct shared
         {
- explicit shared(T x) {}
+ explicit shared(T) {}
 
             // no shared data elements
         };

Modified: branches/doc/boost/spirit/home/support/iterators/detail/multi_pass.hpp
==============================================================================
--- branches/doc/boost/spirit/home/support/iterators/detail/multi_pass.hpp (original)
+++ branches/doc/boost/spirit/home/support/iterators/detail/multi_pass.hpp 2008-04-27 04:13:25 EDT (Sun, 27 Apr 2008)
@@ -58,12 +58,12 @@
         default_input_policy() {}
         
         template <typename Functor>
- default_input_policy(Functor const& x) {}
+ default_input_policy(Functor const&) {}
         
         template <typename MultiPass>
- static void destroy(MultiPass& mp) {}
+ static void destroy(MultiPass&) {}
         
- void swap(default_input_policy& /*x*/) {}
+ void swap(default_input_policy&) {}
         
         template <typename MultiPass, typename TokenType>
         static TokenType& advance_input(MultiPass& mp, TokenType& curtok);
@@ -78,12 +78,12 @@
     struct default_ownership_policy
     {
         template <typename MultiPass>
- static void destroy(MultiPass& mp) {}
+ static void destroy(MultiPass&) {}
 
         void swap(default_ownership_policy&) {}
 
         template <typename MultiPass>
- static void clone(MultiPass& mp) {}
+ static void clone(MultiPass&) {}
 
         template <typename MultiPass>
         static bool release(MultiPass& mp);
@@ -95,7 +95,7 @@
     struct default_storage_policy
     {
         template <typename MultiPass>
- static void destroy(MultiPass& mp) {}
+ static void destroy(MultiPass&) {}
 
         void swap(default_storage_policy&) {}
 
@@ -103,10 +103,10 @@
         static typename MultiPass::reference dereference(MultiPass const& mp);
         
         template <typename MultiPass>
- static void increment(MultiPass& mp) {}
+ static void increment(MultiPass&) {}
         
         template <typename MultiPass>
- static void clear_queue(MultiPass& mp) {}
+ static void clear_queue(MultiPass&) {}
 
         template <typename MultiPass>
         static bool is_eof(MultiPass const& mp);
@@ -121,7 +121,7 @@
     struct default_checking_policy
     {
         template <typename MultiPass>
- static void destroy(MultiPass& mp) {}
+ static void destroy(MultiPass&) {}
 
         void swap(default_checking_policy&) {}
 

Modified: branches/doc/boost/spirit/home/support/iterators/detail/no_check_policy.hpp
==============================================================================
--- branches/doc/boost/spirit/home/support/iterators/detail/no_check_policy.hpp (original)
+++ branches/doc/boost/spirit/home/support/iterators/detail/no_check_policy.hpp 2008-04-27 04:13:25 EDT (Sun, 27 Apr 2008)
@@ -31,7 +31,7 @@
             static void clear_queue(MultiPass&) {}
 
             template <typename MultiPass>
- static void destroy(MultiPass& mp) {}
+ static void destroy(MultiPass&) {}
         };
 
         ///////////////////////////////////////////////////////////////////////

Modified: branches/doc/boost/spirit/home/support/iterators/detail/ref_counted_policy.hpp
==============================================================================
--- branches/doc/boost/spirit/home/support/iterators/detail/ref_counted_policy.hpp (original)
+++ branches/doc/boost/spirit/home/support/iterators/detail/ref_counted_policy.hpp 2008-04-27 04:13:25 EDT (Sun, 27 Apr 2008)
@@ -25,7 +25,7 @@
         ///////////////////////////////////////////////////////////////////////
         struct unique // : detail::default_ownership_policy
         {
- void swap(unique& x) {}
+ void swap(unique&) {}
 
             // clone is called when a copy of the iterator is made, so
             // increment the ref-count.
@@ -54,7 +54,7 @@
             }
 
             template <typename MultiPass>
- static void destroy(MultiPass& mp)
+ static void destroy(MultiPass&)
             {}
         };
 

Modified: branches/doc/boost/spirit/home/support/iterators/detail/split_functor_input_policy.hpp
==============================================================================
--- branches/doc/boost/spirit/home/support/iterators/detail/split_functor_input_policy.hpp (original)
+++ branches/doc/boost/spirit/home/support/iterators/detail/split_functor_input_policy.hpp 2008-04-27 04:13:25 EDT (Sun, 27 Apr 2008)
@@ -71,10 +71,10 @@
 
         protected:
             unique() {}
- explicit unique(Functor const& x) {}
+ explicit unique(Functor const&) {}
 
         public:
- void swap(unique& x) {}
+ void swap(unique&) {}
 
             // get the next token
             template <typename MultiPass>
@@ -154,7 +154,6 @@
                 return ftor;
             }
 
- protected:
             mutable functor_type ftor;
         };
 

Modified: branches/doc/boost/spirit/home/support/iterators/detail/split_std_deque_policy.hpp
==============================================================================
--- branches/doc/boost/spirit/home/support/iterators/detail/split_std_deque_policy.hpp (original)
+++ branches/doc/boost/spirit/home/support/iterators/detail/split_std_deque_policy.hpp 2008-04-27 04:13:25 EDT (Sun, 27 Apr 2008)
@@ -145,7 +145,7 @@
             }
             
             template <typename MultiPass>
- static void destroy(MultiPass& mp)
+ static void destroy(MultiPass&)
             {}
 
         protected:

Modified: branches/doc/boost/spirit/home/support/placeholders.hpp
==============================================================================
--- branches/doc/boost/spirit/home/support/placeholders.hpp (original)
+++ branches/doc/boost/spirit/home/support/placeholders.hpp 2008-04-27 04:13:25 EDT (Sun, 27 Apr 2008)
@@ -83,7 +83,7 @@
     typedef proto::terminal<tag::lit>::type lit_type;
     typedef proto::terminal<tag::wlit>::type wlit_type;
     typedef proto::terminal<tag::eol>::type eol_type;
- typedef proto::terminal<tag::eoi>::type end_type;
+ typedef proto::terminal<tag::eoi>::type eoi_type;
     
     typedef proto::terminal<tag::bin>::type bin_type;
     typedef proto::terminal<tag::oct>::type oct_type;

Modified: branches/doc/boost/thread/win32/condition_variable.hpp
==============================================================================
--- branches/doc/boost/thread/win32/condition_variable.hpp (original)
+++ branches/doc/boost/thread/win32/condition_variable.hpp 2008-04-27 04:13:25 EDT (Sun, 27 Apr 2008)
@@ -14,6 +14,8 @@
 #include <boost/thread/thread_time.hpp>
 #include "interlocked_read.hpp"
 #include <boost/thread/xtime.hpp>
+#include <vector>
+#include <boost/intrusive_ptr.hpp>
 
 namespace boost
 {
@@ -27,79 +29,50 @@
 
             struct list_entry
             {
- detail::win32::handle semaphore;
- long count;
+ detail::win32::handle_manager semaphore;
+ detail::win32::handle_manager wake_sem;
+ long waiters;
                 bool notified;
+ long references;
 
                 list_entry():
- semaphore(0),count(0),notified(0)
+ semaphore(detail::win32::create_anonymous_semaphore(0,LONG_MAX)),
+ wake_sem(0),
+ waiters(1),notified(false),references(0)
                 {}
 
- void release(unsigned count_to_release=1)
+ void release(unsigned count_to_release)
                 {
+ notified=true;
                     detail::win32::ReleaseSemaphore(semaphore,count_to_release,0);
                 }
-
- };
-
- BOOST_STATIC_CONSTANT(unsigned,generation_count=3);
-
- list_entry generations[generation_count];
- detail::win32::handle wake_sem;
-
- void wake_waiters(long count_to_wake)
- {
- detail::interlocked_write_release(&total_count,total_count-count_to_wake);
- detail::win32::ReleaseSemaphore(wake_sem,count_to_wake,0);
- }
-
 
- static bool no_waiters(list_entry const& entry)
- {
- return entry.count==0;
- }
-
- void shift_generations_down()
- {
- list_entry* const last_active_entry=std::remove_if(generations,generations+generation_count,no_waiters);
- if(last_active_entry==generations+generation_count)
+ friend void intrusive_ptr_add_ref(list_entry * p)
                 {
- broadcast_entry(generations[generation_count-1]);
+ BOOST_INTERLOCKED_INCREMENT(&p->references);
                 }
- else
+
+ friend void intrusive_ptr_release(list_entry * p)
                 {
- active_generation_count=unsigned(last_active_entry-generations)+1;
+ if(!BOOST_INTERLOCKED_DECREMENT(&p->references))
+ {
+ delete p;
+ }
                 }
+ };
 
-#ifdef BOOST_MSVC
-#pragma warning(push)
-#pragma warning(disable:4996)
-#endif
- std::copy_backward(generations,generations+active_generation_count-1,generations+active_generation_count);
-#ifdef BOOST_MSVC
-#pragma warning(pop)
-#endif
- generations[0]=list_entry();
- }
+ typedef boost::intrusive_ptr<list_entry> entry_ptr;
+ typedef std::vector<entry_ptr> generation_list;
 
- void broadcast_entry(list_entry& entry)
- {
- entry.release(entry.count);
- entry.count=0;
- dispose_entry(entry);
- }
-
+ generation_list generations;
+ detail::win32::handle_manager wake_sem;
 
- void dispose_entry(list_entry& entry)
+ void wake_waiters(long count_to_wake)
             {
- if(entry.semaphore)
- {
- BOOST_VERIFY(detail::win32::CloseHandle(entry.semaphore));
- entry.semaphore=0;
- }
- entry.notified=false;
+ detail::interlocked_write_release(&total_count,total_count-count_to_wake);
+ detail::win32::ReleaseSemaphore(wake_sem,count_to_wake,0);
             }
-
+
             template<typename lock_type>
             struct relocker
             {
@@ -123,77 +96,79 @@
                     
                 }
             private:
+ relocker(relocker&);
                 void operator=(relocker&);
             };
             
 
- template<typename lock_type>
- void start_wait_loop_first_time(relocker<lock_type>& locker,
- detail::win32::handle_manager& local_wake_sem)
+ entry_ptr get_wait_entry()
             {
- detail::interlocked_write_release(&total_count,total_count+1);
- locker.unlock();
+ boost::lock_guard<boost::mutex> internal_lock(internal_mutex);
+
                 if(!wake_sem)
                 {
                     wake_sem=detail::win32::create_anonymous_semaphore(0,LONG_MAX);
                     BOOST_ASSERT(wake_sem);
                 }
- local_wake_sem=detail::win32::duplicate_handle(wake_sem);
-
- if(generations[0].notified)
+
+ detail::interlocked_write_release(&total_count,total_count+1);
+ if(generations.empty() || generations.back()->notified)
                 {
- shift_generations_down();
+ entry_ptr new_entry(new list_entry);
+ new_entry->wake_sem=wake_sem.duplicate();
+ generations.push_back(new_entry);
+ return new_entry;
                 }
- else if(!active_generation_count)
+ else
                 {
- active_generation_count=1;
+ BOOST_INTERLOCKED_INCREMENT(&generations.back()->waiters);
+ return generations.back();
                 }
             }
-
- void ensure_generation_present()
+
+ struct entry_manager
             {
- if(!generations[0].semaphore)
+ entry_ptr const entry;
+
+ entry_manager(entry_ptr const& entry_):
+ entry(entry_)
+ {}
+
+ ~entry_manager()
                 {
- generations[0].semaphore=detail::win32::create_anonymous_semaphore(0,LONG_MAX);
- BOOST_ASSERT(generations[0].semaphore);
+ BOOST_INTERLOCKED_DECREMENT(&entry->waiters);
                 }
- }
-
- template<typename lock_type>
- void start_wait_loop(relocker<lock_type>& locker,
- detail::win32::handle_manager& local_wake_sem,
- detail::win32::handle_manager& sem)
- {
- boost::mutex::scoped_lock internal_lock(internal_mutex);
- if(!local_wake_sem)
+
+ list_entry* operator->()
                 {
- start_wait_loop_first_time(locker,local_wake_sem);
+ return entry.get();
                 }
- ensure_generation_present();
- ++generations[0].count;
- sem=detail::win32::duplicate_handle(generations[0].semaphore);
- }
+
+ private:
+ void operator=(entry_manager&);
+ entry_manager(entry_manager&);
+ };
+
 
         protected:
             template<typename lock_type>
             bool do_wait(lock_type& lock,timeout wait_until)
             {
- detail::win32::handle_manager local_wake_sem;
- detail::win32::handle_manager sem;
- bool woken=false;
-
                 relocker<lock_type> locker(lock);
-
+
+ entry_manager entry(get_wait_entry());
+
+ locker.unlock();
+
+ bool woken=false;
                 while(!woken)
                 {
- start_wait_loop(locker,local_wake_sem,sem);
-
- if(!this_thread::interruptible_wait(sem,wait_until))
+ if(!this_thread::interruptible_wait(entry->semaphore,wait_until))
                     {
                         return false;
                     }
                 
- unsigned long const woken_result=detail::win32::WaitForSingleObject(local_wake_sem,0);
+ unsigned long const woken_result=detail::win32::WaitForSingleObject(entry->wake_sem,0);
                     BOOST_ASSERT(woken_result==detail::win32::timeout || woken_result==0);
 
                     woken=(woken_result==0);
@@ -214,21 +189,19 @@
         
             basic_condition_variable(const basic_condition_variable& other);
             basic_condition_variable& operator=(const basic_condition_variable& other);
+
+ static bool no_waiters(entry_ptr const& entry)
+ {
+ return !detail::interlocked_read_acquire(&entry->waiters);
+ }
         public:
             basic_condition_variable():
                 total_count(0),active_generation_count(0),wake_sem(0)
             {}
             
             ~basic_condition_variable()
- {
- for(unsigned i=0;i<generation_count;++i)
- {
- dispose_entry(generations[i]);
- }
- detail::win32::CloseHandle(wake_sem);
- }
+ {}
 
-
             void notify_one()
             {
                 if(detail::interlocked_read_acquire(&total_count))
@@ -239,33 +212,14 @@
                         return;
                     }
                     wake_waiters(1);
-
- unsigned waiting_count=0;
-
- for(unsigned generation=active_generation_count;generation!=0;--generation)
- {
- list_entry& entry=generations[generation-1];
- waiting_count+=entry.count;
- if(entry.count)
- {
- entry.notified=true;
- entry.release();
- if(!--entry.count)
- {
- dispose_entry(entry);
- if(generation==active_generation_count)
- {
- --active_generation_count;
- }
- }
- }
- }
- if(waiting_count<=total_count)
+
+ for(generation_list::iterator it=generations.begin(),
+ end=generations.end();
+ it!=end;++it)
                     {
- shift_generations_down();
- ensure_generation_present();
- generations[0].release();
+ (*it)->release(1);
                     }
+ generations.erase(std::remove_if(generations.begin(),generations.end(),no_waiters),generations.end());
                 }
             }
         
@@ -274,24 +228,18 @@
                 if(detail::interlocked_read_acquire(&total_count))
                 {
                     boost::mutex::scoped_lock internal_lock(internal_mutex);
- long waiting_count=total_count;
-
- wake_waiters(total_count);
- for(unsigned generation=active_generation_count;generation!=0;--generation)
+ if(!total_count)
                     {
- list_entry& entry=generations[generation-1];
- if(entry.count)
- {
- waiting_count-=entry.count;
- broadcast_entry(entry);
- }
+ return;
                     }
- if(waiting_count)
+ wake_waiters(total_count);
+ for(generation_list::iterator it=generations.begin(),
+ end=generations.end();
+ it!=end;++it)
                     {
- ensure_generation_present();
- generations[0].release(waiting_count);
+ (*it)->release(detail::interlocked_read_acquire(&(*it)->waiters));
                     }
- active_generation_count=0;
+ wake_sem=detail::win32::handle(0);
                 }
             }
         

Modified: branches/doc/boost/thread/win32/thread.hpp
==============================================================================
--- branches/doc/boost/thread/win32/thread.hpp (original)
+++ branches/doc/boost/thread/win32/thread.hpp 2008-04-27 04:13:25 EDT (Sun, 27 Apr 2008)
@@ -185,6 +185,9 @@
             {
                 f();
             }
+ private:
+ void operator=(thread_data&);
+ thread_data(thread_data&);
         };
         
         mutable boost::mutex thread_info_mutex;

Deleted: branches/doc/boost/unordered/detail/allocator.hpp
==============================================================================
--- branches/doc/boost/unordered/detail/allocator.hpp 2008-04-27 04:13:25 EDT (Sun, 27 Apr 2008)
+++ (empty file)
@@ -1,237 +0,0 @@
-
-// Copyright 2005-2008 Daniel James.
-// Distributed under the Boost Software License, Version 1.0. (See accompanying
-// file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
-
-#ifndef BOOST_UNORDERED_DETAIL_ALLOCATOR_UTILITIES_HPP_INCLUDED
-#define BOOST_UNORDERED_DETAIL_ALLOCATOR_UTILITIES_HPP_INCLUDED
-
-#if defined(_MSC_VER) && (_MSC_VER >= 1020)
-# pragma once
-#endif
-
-#include <boost/config.hpp>
-
-#if (defined(BOOST_NO_STD_ALLOCATOR) || defined(BOOST_DINKUMWARE_STDLIB)) \
- && !defined(__BORLANDC__)
-# define BOOST_UNORDERED_USE_ALLOCATOR_UTILITIES
-#endif
-
-#if defined(BOOST_UNORDERED_USE_ALLOCATOR_UTILITIES)
-# include <boost/detail/allocator_utilities.hpp>
-#endif
-
-#include <boost/mpl/aux_/config/eti.hpp>
-
-namespace boost {
- namespace unordered_detail {
-
-#if defined(BOOST_UNORDERED_USE_ALLOCATOR_UTILITIES)
- template <class Alloc, class T>
- struct rebind_wrap : ::boost::detail::allocator::rebind_to<Alloc, T> {};
-#else
- template <class Alloc, class T>
- struct rebind_wrap
- {
- typedef BOOST_DEDUCED_TYPENAME
- Alloc::BOOST_NESTED_TEMPLATE rebind<T>::other
- type;
- };
-#endif
-
-#if !BOOST_WORKAROUND(BOOST_MSVC, < 1300)
- template <class T>
- inline void reset(T& x) { x = T(); }
-
- template <class Ptr>
- inline Ptr null_ptr() { return Ptr(); }
-#else
- template <class T>
- inline void reset_impl(T& x, ...) { x = T(); }
- template <class T>
- inline void reset_impl(T*& x, int) { x = 0; }
- template <class T>
- inline void reset(T& x) { reset_impl(x); }
-
- template <class Ptr>
- inline Ptr null_ptr() { Ptr x; reset(x); return x; }
-#endif
-
- // Work around for Microsoft's ETI bug.
-
- template <class Allocator> struct allocator_value_type
- {
- typedef BOOST_DEDUCED_TYPENAME Allocator::value_type type;
- };
-
- template <class Allocator> struct allocator_pointer
- {
- typedef BOOST_DEDUCED_TYPENAME Allocator::pointer type;
- };
-
- template <class Allocator> struct allocator_const_pointer
- {
- typedef BOOST_DEDUCED_TYPENAME Allocator::const_pointer type;
- };
-
- template <class Allocator> struct allocator_reference
- {
- typedef BOOST_DEDUCED_TYPENAME Allocator::reference type;
- };
-
- template <class Allocator> struct allocator_const_reference
- {
- typedef BOOST_DEDUCED_TYPENAME Allocator::const_reference type;
- };
-
-#if defined(BOOST_MPL_CFG_MSVC_ETI_BUG)
-
- template <>
- struct allocator_value_type<int>
- {
- typedef int type;
- };
-
- template <>
- struct allocator_pointer<int>
- {
- typedef int type;
- };
-
- template <>
- struct allocator_const_pointer<int>
- {
- typedef int type;
- };
-
- template <>
- struct allocator_reference<int>
- {
- typedef int type;
- };
-
- template <>
- struct allocator_const_reference<int>
- {
- typedef int type;
- };
-
-#endif
-
- template <class Allocator>
- struct allocator_constructor
- {
- typedef BOOST_DEDUCED_TYPENAME allocator_value_type<Allocator>::type value_type;
- typedef BOOST_DEDUCED_TYPENAME allocator_pointer<Allocator>::type pointer;
-
- Allocator& alloc_;
- pointer ptr_;
- bool constructed_;
-
- allocator_constructor(Allocator& a)
- : alloc_(a), ptr_(), constructed_(false)
- {
-#if BOOST_WORKAROUND(BOOST_MSVC, < 1300)
- unordered_detail::reset(ptr_);
-#endif
- }
-
- ~allocator_constructor() {
- if(ptr_) {
- if(constructed_) alloc_.destroy(ptr_);
- alloc_.deallocate(ptr_, 1);
- }
- }
-
- template <class V>
- void construct(V const& v) {
- BOOST_ASSERT(!ptr_ && !constructed_);
- ptr_ = alloc_.allocate(1);
- alloc_.construct(ptr_, value_type(v));
- constructed_ = true;
- }
-
- void construct(value_type const& v) {
- BOOST_ASSERT(!ptr_ && !constructed_);
- ptr_ = alloc_.allocate(1);
- alloc_.construct(ptr_, v);
- constructed_ = true;
- }
-
- pointer get() const
- {
- return ptr_;
- }
-
- // no throw
- pointer release()
- {
- pointer p = ptr_;
- constructed_ = false;
- unordered_detail::reset(ptr_);
- return p;
- }
- };
-
- template <class Allocator>
- struct allocator_array_constructor
- {
- typedef BOOST_DEDUCED_TYPENAME allocator_pointer<Allocator>::type pointer;
-
- Allocator& alloc_;
- pointer ptr_;
- pointer constructed_;
- std::size_t length_;
-
- allocator_array_constructor(Allocator& a)
- : alloc_(a), ptr_(), constructed_(), length_(0)
- {
-#if BOOST_WORKAROUND(BOOST_MSVC, < 1300)
- unordered_detail::reset(constructed_);
- unordered_detail::reset(ptr_);
-#endif
- }
-
- ~allocator_array_constructor() {
- if (ptr_) {
- for(pointer p = ptr_; p != constructed_; ++p)
- alloc_.destroy(p);
-
- alloc_.deallocate(ptr_, length_);
- }
- }
-
- template <class V>
- void construct(V const& v, std::size_t l)
- {
- BOOST_ASSERT(!ptr_);
- length_ = l;
- ptr_ = alloc_.allocate(length_);
- pointer end = ptr_ + static_cast<std::ptrdiff_t>(length_);
- for(constructed_ = ptr_; constructed_ != end; ++constructed_)
- alloc_.construct(constructed_, v);
- }
-
- pointer get() const
- {
- return ptr_;
- }
-
- pointer release()
- {
- pointer p(ptr_);
- unordered_detail::reset(ptr_);
- return p;
- }
- private:
- allocator_array_constructor(allocator_array_constructor const&);
- allocator_array_constructor& operator=(allocator_array_constructor const&);
- };
- }
-}
-
-#if defined(BOOST_UNORDERED_USE_ALLOCATOR_UTILITIES)
-# undef BOOST_UNORDERED_USE_ALLOCATOR_UTILITIES
-#endif
-
-#endif

Modified: branches/doc/boost/unordered/detail/hash_table.hpp
==============================================================================
--- branches/doc/boost/unordered/detail/hash_table.hpp (original)
+++ branches/doc/boost/unordered/detail/hash_table.hpp 2008-04-27 04:13:25 EDT (Sun, 27 Apr 2008)
@@ -24,7 +24,7 @@
 #include <boost/limits.hpp>
 #include <boost/assert.hpp>
 #include <boost/static_assert.hpp>
-#include <boost/unordered/detail/allocator.hpp>
+#include <boost/unordered/detail/allocator_helpers.hpp>
 #include <boost/type_traits/is_same.hpp>
 #include <boost/mpl/if.hpp>
 #include <boost/mpl/and.hpp>
@@ -32,6 +32,13 @@
 
 #include <boost/mpl/aux_/config/eti.hpp>
 
+#if defined(BOOST_HAS_RVALUE_REFS) && defined(BOOST_HAS_VARIADIC_TMPL)
+#include <boost/type_traits/remove_reference.hpp>
+#include <boost/type_traits/remove_const.hpp>
+#include <boost/utility/enable_if.hpp>
+#include <boost/mpl/not.hpp>
+#endif
+
 #if BOOST_WORKAROUND(__BORLANDC__, <= 0x0582)
 #define BOOST_UNORDERED_BORLAND_BOOL(x) (bool)(x)
 #else
@@ -50,7 +57,6 @@
 
         static const std::size_t default_initial_bucket_count = 50;
         static const float minimum_max_load_factor = 1e-3f;
- inline std::size_t next_prime(std::size_t n);
 
         template <class T>
         inline void hash_swap(T& x, T& y)
@@ -101,6 +107,32 @@
                 bound--;
             return *bound;
         }
+
+ // Controls how many buckets are allocated and which buckets hash
+ // values map to. Does not contain the buckets themselves, or ever
+ // deal with them directly.
+
+ struct bucket_manager {
+ std::size_t bucket_count_;
+
+ bucket_manager()
+ : bucket_count_(0) {}
+
+ explicit bucket_manager(std::size_t n)
+ : bucket_count_(next_prime(n)) {}
+
+ std::size_t bucket_count() const {
+ return bucket_count_;
+ }
+
+ std::size_t bucket_from_hash(std::size_t hashed) const {
+ return hashed % bucket_count_;
+ }
+
+ std::size_t max_bucket_count(std::size_t max_size) const {
+ return prev_prime(max_size);
+ }
+ };
 
         // pair_cast - used to convert between pair types.
 

Modified: branches/doc/boost/unordered/detail/hash_table_impl.hpp
==============================================================================
--- branches/doc/boost/unordered/detail/hash_table_impl.hpp (original)
+++ branches/doc/boost/unordered/detail/hash_table_impl.hpp 2008-04-27 04:13:25 EDT (Sun, 27 Apr 2008)
@@ -108,15 +108,114 @@
             struct node : node_base
             {
             public:
+#if defined(BOOST_HAS_RVALUE_REFS) && defined(BOOST_HAS_VARIADIC_TMPL)
+ template <typename... Args>
+ node(Args&&... args)
+ : node_base(), value_(std::forward<Args>(args)...) {}
+#else
                 node(value_type const& v) : node_base(), value_(v) {}
+#endif
 
                 value_type value_;
             };
 
+#if defined(BOOST_HAS_RVALUE_REFS) && defined(BOOST_HAS_VARIADIC_TMPL)
+
+ // allocators
+ //
+ // Stores all the allocators that we're going to need.
+
+ struct allocators
+ {
+ node_allocator node_alloc_;
+ bucket_allocator bucket_alloc_;
+
+ allocators(value_allocator const& a)
+ : node_alloc_(a), bucket_alloc_(a)
+ {}
+
+ void destroy(link_ptr ptr)
+ {
+ node_ptr n(node_alloc_.address(*static_cast<node*>(&*ptr)));
+ node_alloc_.destroy(n);
+ node_alloc_.deallocate(n, 1);
+ }
+
+ void swap(allocators& x)
+ {
+ unordered_detail::hash_swap(node_alloc_, x.node_alloc_);
+ unordered_detail::hash_swap(bucket_alloc_, x.bucket_alloc_);
+ }
+
+ bool operator==(allocators const& x)
+ {
+ return node_alloc_ == x.node_alloc_;
+ }
+ };
+
             // node_constructor
             //
             // Used to construct nodes in an exception safe manner.
 
+ class node_constructor
+ {
+ allocators& allocators_;
+
+ node_ptr node_;
+ bool node_constructed_;
+
+ public:
+
+ node_constructor(allocators& a)
+ : allocators_(a),
+ node_(), node_constructed_(false)
+ {
+ }
+
+ ~node_constructor()
+ {
+ if (node_) {
+ if (node_constructed_)
+ allocators_.node_alloc_.destroy(node_);
+ allocators_.node_alloc_.deallocate(node_, 1);
+ }
+ }
+
+ template <typename... Args>
+ void construct(Args&&... args)
+ {
+ BOOST_ASSERT(!node_);
+ node_constructed_ = false;
+
+ node_ = allocators_.node_alloc_.allocate(1);
+ allocators_.node_alloc_.construct(node_, std::forward<Args>(args)...);
+ node_constructed_ = true;
+ }
+
+ node_ptr get() const
+ {
+ BOOST_ASSERT(node_);
+ return node_;
+ }
+
+ // no throw
+ link_ptr release()
+ {
+ node_ptr p = node_;
+ unordered_detail::reset(node_);
+ return link_ptr(allocators_.bucket_alloc_.address(*p));
+ }
+
+ private:
+ node_constructor(node_constructor const&);
+ node_constructor& operator=(node_constructor const&);
+ };
+#else
+
+ // allocators
+ //
+ // Stores all the allocators that we're going to need.
+
             struct allocators
             {
                 node_allocator node_alloc_;
@@ -151,6 +250,10 @@
                 }
             };
 
+ // node_constructor
+ //
+ // Used to construct nodes in an exception safe manner.
+
             class node_constructor
             {
                 allocators& allocators_;
@@ -201,6 +304,27 @@
                     value_constructed_ = true;
                 }
 
+#if defined(BOOST_HAS_RVALUE_REFS) && defined(BOOST_HAS_VARIADIC_TMPL)
+ template <typename... Args>
+ void construct(Args&&... args)
+ {
+ BOOST_ASSERT(!node_);
+ value_constructed_ = false;
+ node_base_constructed_ = false;
+
+ node_ = allocators_.node_alloc_.allocate(1);
+
+ allocators_.node_base_alloc_.construct(
+ allocators_.node_base_alloc_.address(*node_),
+ node_base());
+ node_base_constructed_ = true;
+
+ allocators_.value_alloc_.construct(
+ allocators_.value_alloc_.address(node_->value_), std::forward<Args>(args)...);
+ value_constructed_ = true;
+ }
+#endif
+
                 node_ptr get() const
                 {
                     BOOST_ASSERT(node_);
@@ -219,6 +343,7 @@
                 node_constructor(node_constructor const&);
                 node_constructor& operator=(node_constructor const&);
             };
+#endif
 
             // Methods for navigating groups of elements with equal keys.
 
@@ -312,15 +437,15 @@
 
             allocators allocators_;
             bucket_ptr buckets_;
- size_type bucket_count_;
+ bucket_manager bucket_manager_;
             bucket_ptr cached_begin_bucket_;
- size_type size_;
+ size_type size_;
 
             // Constructors/Deconstructor
 
             BOOST_UNORDERED_TABLE_DATA(size_type n, value_allocator const& a)
               : allocators_(a),
- buckets_(), bucket_count_(next_prime(n)),
+ buckets_(), bucket_manager_(n),
                 cached_begin_bucket_(), size_(0)
             {
                 BOOST_UNORDERED_MSVC_RESET_PTR(buckets_);
@@ -329,7 +454,7 @@
 
             BOOST_UNORDERED_TABLE_DATA(BOOST_UNORDERED_TABLE_DATA const& x, size_type n)
               : allocators_(x.allocators_),
- buckets_(), bucket_count_(next_prime(n)),
+ buckets_(), bucket_manager_(n),
                 cached_begin_bucket_(), size_(0)
             {
                 BOOST_UNORDERED_MSVC_RESET_PTR(buckets_);
@@ -338,7 +463,7 @@
 
             BOOST_UNORDERED_TABLE_DATA(BOOST_UNORDERED_TABLE_DATA& x, move_tag)
                 : allocators_(x.allocators_),
- buckets_(x.buckets_), bucket_count_(x.bucket_count_),
+ buckets_(x.buckets_), bucket_manager_(x.bucket_manager_),
                 cached_begin_bucket_(x.cached_begin_bucket_), size_(x.size_)
             {
                 unordered_detail::reset(x.buckets_);
@@ -346,19 +471,19 @@
 
             BOOST_UNORDERED_TABLE_DATA(BOOST_UNORDERED_TABLE_DATA& x,
                     value_allocator const& a, size_type n, move_tag)
- : allocators_(a), buckets_(), bucket_count_(),
+ : allocators_(a), buckets_(), bucket_manager_(),
                 cached_begin_bucket_(), size_(0)
             {
                 if(allocators_ == x.allocators_) {
                     buckets_ = x.buckets_;
- bucket_count_ = x.bucket_count_;
+ bucket_manager_ = x.bucket_manager_;
                     cached_begin_bucket_ = x.cached_begin_bucket_;
                     size_ = x.size_;
                     unordered_detail::reset(x.buckets_);
                 }
                 else {
                     BOOST_UNORDERED_MSVC_RESET_PTR(buckets_);
- bucket_count_ = next_prime(n);
+ bucket_manager_ = bucket_manager(n);
                     create_buckets();
                 }
             }
@@ -370,15 +495,17 @@
             }
 
             void create_buckets() {
+ size_type bucket_count = bucket_manager_.bucket_count();
+
                 // The array constructor will clean up in the event of an
                 // exception.
                 allocator_array_constructor<bucket_allocator>
                     constructor(allocators_.bucket_alloc_);
 
                 // Creates an extra bucket to act as a sentinel.
- constructor.construct(bucket(), bucket_count_ + 1);
+ constructor.construct(bucket(), bucket_count + 1);
 
- cached_begin_bucket_ = constructor.get() + static_cast<difference_type>(bucket_count_);
+ cached_begin_bucket_ = constructor.get() + static_cast<difference_type>(bucket_count);
 
                 // Set up the sentinel.
                 cached_begin_bucket_->next_ = link_ptr(cached_begin_bucket_);
@@ -404,7 +531,8 @@
                     for(begin = buckets_; begin != end; ++begin)
                         allocators_.bucket_alloc_.destroy(begin);
 
- allocators_.bucket_alloc_.deallocate(buckets_, bucket_count_ + 1);
+ allocators_.bucket_alloc_.deallocate(buckets_,
+ bucket_manager_.bucket_count() + 1);
                 }
             }
 
@@ -419,7 +547,7 @@
             void swap(BOOST_UNORDERED_TABLE_DATA& other)
             {
                 std::swap(buckets_, other.buckets_);
- std::swap(bucket_count_, other.bucket_count_);
+ std::swap(bucket_manager_, other.bucket_manager_);
                 std::swap(cached_begin_bucket_, other.cached_begin_bucket_);
                 std::swap(size_, other.size_);
             }
@@ -430,17 +558,26 @@
                 delete_buckets();
                 buckets_ = other.buckets_;
                 unordered_detail::reset(other.buckets_);
- bucket_count_ = other.bucket_count_;
+ bucket_manager_ = other.bucket_manager_;
                 cached_begin_bucket_ = other.cached_begin_bucket_;
                 size_ = other.size_;
             }
 
+ // Return the bucket number for a hashed value.
+ //
+ // no throw
+ size_type bucket_from_hash(size_type hashed) const
+ {
+ return bucket_manager_.bucket_from_hash(hashed);
+ }
+
             // Return the bucket for a hashed value.
             //
             // no throw
- bucket_ptr bucket_from_hash(size_type hashed) const
+ bucket_ptr bucket_ptr_from_hash(size_type hashed) const
             {
- return buckets_ + static_cast<difference_type>(hashed % bucket_count_);
+ return buckets_ + static_cast<difference_type>(
+ bucket_manager_.bucket_from_hash(hashed));
             }
 
             // Begin & End
@@ -449,7 +586,7 @@
 
             bucket_ptr buckets_end() const
             {
- return buckets_ + static_cast<difference_type>(bucket_count_);
+ return buckets_ + static_cast<difference_type>(bucket_manager_.bucket_count());
             }
 
             iterator_base begin() const
@@ -694,7 +831,7 @@
                 BOOST_ASSERT(base == end.bucket_);
 
                 split_group(end.node_);
-
+
                 link_ptr ptr(base->next_);
                 base->next_ = end.node_;
 
@@ -1147,7 +1284,7 @@
             //
             // Swap's behaviour when allocators aren't equal is in dispute, for
             // details see:
- //
+ //
             // http://unordered.nfshost.com/doc/html/unordered/rationale.html#swapping_containers_with_unequal_allocators
             //
             // ----------------------------------------------------------------
@@ -1159,6 +1296,13 @@
 
             void swap(BOOST_UNORDERED_TABLE& x)
             {
+ // The swap code can work when swapping a container with itself
+ // but it triggers an assertion in buffered_functions.
+ // At the moment, I'd rather leave that assertion in and add a
+ // check here, rather than remove the assertion. I might change
+ // this at a later date.
+ if(this == &x) return;
+
                 // These can throw, but they only affect the function objects
                 // that aren't in use so it is strongly exception safe, via.
                 // double buffering.
@@ -1232,9 +1376,9 @@
             // accessors
 
             // no throw
- value_allocator get_allocator() const
+ node_allocator get_allocator() const
             {
- return data_.allocators_.value_alloc_;
+ return data_.allocators_.node_alloc_;
             }
 
             // no throw
@@ -1275,7 +1419,7 @@
             size_type bucket(key_type const& k) const
             {
                 // hash_function can throw:
- return hash_function()(k) % data_.bucket_count_;
+ return data_.bucket_from_hash(hash_function()(k));
             }
 
 
@@ -1288,7 +1432,7 @@
             // no throw
             size_type bucket_count() const
             {
- return data_.bucket_count_;
+ return data_.bucket_manager_.bucket_count();
             }
 
             // no throw
@@ -1324,7 +1468,7 @@
                 // From 6.3.1/13:
                 // Only resize when size >= mlf_ * count
                 max_load_ = double_to_size_t(ceil(
- (double) mlf_ * data_.bucket_count_));
+ (double) mlf_ * data_.bucket_manager_.bucket_count()));
             }
 
             // basic exception safety
@@ -1337,26 +1481,6 @@
                 return need_to_reserve;
             }
 
- // basic exception safety
- //
- // This version of reserve is called when inserting a range
- // into a container with equivalent keys, it creates more buckets
- // if the resulting load factor would be over 80% of the load
- // factor. This is to try to avoid excessive rehashes.
- bool reserve_extra(size_type n)
- {
- using namespace std;
-
- bool need_to_reserve = n >= max_load_;
- // throws - basic:
- if (need_to_reserve) {
- rehash_impl(double_to_size_t(floor(
- n / (double) mlf_ * 1.25)) + 1);
- }
- BOOST_ASSERT(n < max_load_ || n > max_size());
- return need_to_reserve;
- }
-
         public:
 
             // no throw
@@ -1376,9 +1500,9 @@
             // no throw
             float load_factor() const
             {
- BOOST_ASSERT(data_.bucket_count_ != 0);
+ BOOST_ASSERT(data_.bucket_manager_.bucket_count() != 0);
                 return static_cast<float>(data_.size_)
- / static_cast<float>(data_.bucket_count_);
+ / static_cast<float>(data_.bucket_manager_.bucket_count());
             }
 
         private:
@@ -1403,6 +1527,41 @@
                 return v.first;
             }
 
+#if defined(BOOST_HAS_RVALUE_REFS) && defined(BOOST_HAS_VARIADIC_TMPL)
+ struct no_key {};
+
+ template <typename Arg1, typename... Args>
+ static typename boost::enable_if<
+ boost::mpl::and_<
+ boost::mpl::not_<boost::is_same<key_type, value_type> >,
+ boost::is_same<Arg1, key_type>
+ >,
+ key_type>::type const& extract_key(Arg1 const& k, Args const&...)
+ {
+ return k;
+ }
+
+ template <typename First, typename Second>
+ static typename boost::enable_if<
+ boost::mpl::and_<
+ boost::mpl::not_<boost::is_same<key_type, value_type> >,
+ boost::is_same<key_type,
+ typename boost::remove_const<
+ typename boost::remove_reference<First>::type
+ >::type>
+ >,
+ key_type>::type const& extract_key(std::pair<First, Second> const& v)
+ {
+ return v.first;
+ }
+
+ template <typename... Args>
+ static no_key extract_key(Args const&...)
+ {
+ return no_key();
+ }
+#endif
+
         public:
 
             // if hash function throws, basic exception safety
@@ -1458,7 +1617,7 @@
                         // src_bucket to dst.
 
                         // This next line throws iff the hash function throws.
- bucket_ptr dst_bucket = dst.bucket_from_hash(
+ bucket_ptr dst_bucket = dst.bucket_ptr_from_hash(
                                 hf(extract_key(data::get_value(src_bucket->next_))));
 
                         link_ptr n = src_bucket->next_;
@@ -1484,7 +1643,7 @@
                     for(link_ptr it = src.begin(i);
                             BOOST_UNORDERED_BORLAND_BOOL(it); it = data::next_group(it)) {
                         // hash function can throw.
- bucket_ptr dst_bucket = dst.bucket_from_hash(
+ bucket_ptr dst_bucket = dst.bucket_ptr_from_hash(
                                 hf(extract_key(data::get_value(it))));
                         // throws, strong
                         dst.copy_group(it, dst_bucket);
@@ -1507,20 +1666,74 @@
             // strong otherwise
             iterator_base insert(value_type const& v)
             {
- key_type const& k = extract_key(v);
- size_type hash_value = hash_function()(k);
- bucket_ptr bucket = data_.bucket_from_hash(hash_value);
- link_ptr position = find_iterator(bucket, k);
+ // Create the node before rehashing in case it throws an
+ // exception (need strong safety in such a case).
+ node_constructor a(data_.allocators_);
+ a.construct(v);
 
+ return insert_impl(a);
+ }
+
+ // Insert (equivalent key containers)
+
+ // if hash function throws, basic exception safety
+ // strong otherwise
+ iterator_base insert_hint(iterator_base const& it, value_type const& v)
+ {
                 // Create the node before rehashing in case it throws an
                 // exception (need strong safety in such a case).
                 node_constructor a(data_.allocators_);
                 a.construct(v);
 
+ return insert_hint_impl(it, a);
+ }
+
+#if defined(BOOST_HAS_RVALUE_REFS) && defined(BOOST_HAS_VARIADIC_TMPL)
+ // Insert (equivalent key containers)
+ // (I'm using an overloaded insert for both 'insert' and 'emplace')
+
+ // if hash function throws, basic exception safety
+ // strong otherwise
+ template <class... Args>
+ iterator_base insert(Args&&... args)
+ {
+ // Create the node before rehashing in case it throws an
+ // exception (need strong safety in such a case).
+ node_constructor a(data_.allocators_);
+ a.construct(std::forward<Args>(args)...);
+
+ return insert_impl(a);
+ }
+
+ // Insert (equivalent key containers)
+ // (I'm using an overloaded insert for both 'insert' and 'emplace')
+
+ // if hash function throws, basic exception safety
+ // strong otherwise
+ template <class... Args>
+ iterator_base insert_hint(iterator_base const& it, Args&&... args)
+ {
+ // Create the node before rehashing in case it throws an
+ // exception (need strong safety in such a case).
+ node_constructor a(data_.allocators_);
+ a.construct(std::forward<Args>(args)...);
+
+ return insert_hint_impl(it, a);
+ }
+
+#endif
+
+ iterator_base insert_impl(node_constructor& a)
+ {
+ key_type const& k = extract_key(a.get()->value_);
+ size_type hash_value = hash_function()(k);
+ bucket_ptr bucket = data_.bucket_ptr_from_hash(hash_value);
+ link_ptr position = find_iterator(bucket, k);
+
                 // reserve has basic exception safety if the hash function
                 // throws, strong otherwise.
                 if(reserve(size() + 1))
- bucket = data_.bucket_from_hash(hash_value);
+ bucket = data_.bucket_ptr_from_hash(hash_value);
 
                 // I'm relying on link_ptr not being invalidated by
                 // the rehash here.
@@ -1531,17 +1744,13 @@
                 );
             }
 
- // Insert (equivalent key containers)
-
- // if hash function throws, basic exception safety
- // strong otherwise
- iterator_base insert_hint(iterator_base const& it, value_type const& v)
+ iterator_base insert_hint_impl(iterator_base const& it, node_constructor& a)
             {
                 // equal can throw, but with no effects
- if (it == data_.end() || !equal(extract_key(v), *it)) {
+ if (it == data_.end() || !equal(extract_key(a.get()->value_), *it)) {
                     // Use the standard insert if the iterator doesn't point
                     // to a matching key.
- return insert(v);
+ return insert_impl(a);
                 }
                 else {
                     // Find the first node in the group - so that the node
@@ -1551,15 +1760,10 @@
                     while(data_.prev_in_group(start)->next_ == start)
                         start = data_.prev_in_group(start);
 
- // Create the node before rehashing in case it throws an
- // exception (need strong safety in such a case).
- node_constructor a(data_.allocators_);
- a.construct(v);
-
                     // reserve has basic exception safety if the hash function
                     // throws, strong otherwise.
                     bucket_ptr base = reserve(size() + 1) ?
- get_bucket(extract_key(v)) : it.bucket_;
+ get_bucket(extract_key(a.get()->value_)) : it.bucket_;
 
                     // Nothing after this point can throw
 
@@ -1583,7 +1787,7 @@
                 }
                 else {
                     // Only require basic exception safety here
- reserve_extra(size() + distance);
+ reserve(size() + distance);
                     node_constructor a(data_.allocators_);
 
                     for (; i != j; ++i) {
@@ -1633,7 +1837,7 @@
                 typedef BOOST_DEDUCED_TYPENAME value_type::second_type mapped_type;
 
                 size_type hash_value = hash_function()(k);
- bucket_ptr bucket = data_.bucket_from_hash(hash_value);
+ bucket_ptr bucket = data_.bucket_ptr_from_hash(hash_value);
                 link_ptr pos = find_iterator(bucket, k);
 
                 if (BOOST_UNORDERED_BORLAND_BOOL(pos))
@@ -1650,7 +1854,7 @@
                     // reserve has basic exception safety if the hash function
                     // throws, strong otherwise.
                     if(reserve(size() + 1))
- bucket = data_.bucket_from_hash(hash_value);
+ bucket = data_.bucket_ptr_from_hash(hash_value);
 
                     // Nothing after this point can throw.
 
@@ -1667,9 +1871,9 @@
                 // No side effects in this initial code
                 key_type const& k = extract_key(v);
                 size_type hash_value = hash_function()(k);
- bucket_ptr bucket = data_.bucket_from_hash(hash_value);
+ bucket_ptr bucket = data_.bucket_ptr_from_hash(hash_value);
                 link_ptr pos = find_iterator(bucket, k);
-
+
                 if (BOOST_UNORDERED_BORLAND_BOOL(pos)) {
                     // Found an existing key, return it (no throw).
                     return std::pair<iterator_base, bool>(
@@ -1687,7 +1891,7 @@
                     // reserve has basic exception safety if the hash function
                     // throws, strong otherwise.
                     if(reserve(size() + 1))
- bucket = data_.bucket_from_hash(hash_value);
+ bucket = data_.bucket_ptr_from_hash(hash_value);
 
                     // Nothing after this point can throw.
 
@@ -1710,6 +1914,104 @@
                     return insert(v).first;
             }
 
+#if defined(BOOST_HAS_RVALUE_REFS) && defined(BOOST_HAS_VARIADIC_TMPL)
+ // Insert (unique keys)
+ // (I'm using an overloaded insert for both 'insert' and 'emplace')
+ //
+ // TODO:
+ // For sets: create a local key without creating the node?
+ // For maps: use the first argument as the key.
+
+ // if hash function throws, basic exception safety
+ // strong otherwise
+ template<typename... Args>
+ std::pair<iterator_base, bool> insert(Args&&... args)
+ {
+ return insert_impl(
+ extract_key(std::forward<Args>(args)...),
+ std::forward<Args>(args)...);
+ }
+
+ template<typename... Args>
+ std::pair<iterator_base, bool> insert_impl(key_type const& k, Args&&... args)
+ {
+ // No side effects in this initial code
+ size_type hash_value = hash_function()(k);
+ bucket_ptr bucket = data_.bucket_ptr_from_hash(hash_value);
+ link_ptr pos = find_iterator(bucket, k);
+
+ if (BOOST_UNORDERED_BORLAND_BOOL(pos)) {
+ // Found an existing key, return it (no throw).
+ return std::pair<iterator_base, bool>(
+ iterator_base(bucket, pos), false);
+
+ } else {
+ // Doesn't already exist, add to bucket.
+ // Side effects only in this block.
+
+ // Create the node before rehashing in case it throws an
+ // exception (need strong safety in such a case).
+ node_constructor a(data_.allocators_);
+ a.construct(std::forward<Args>(args)...);
+
+ // reserve has basic exception safety if the hash function
+ // throws, strong otherwise.
+ if(reserve(size() + 1))
+ bucket = data_.bucket_ptr_from_hash(hash_value);
+
+ // Nothing after this point can throw.
+
+ link_ptr n = data_.link_node_in_bucket(a, bucket);
+
+ return std::pair<iterator_base, bool>(
+ iterator_base(bucket, n), true);
+ }
+ }
+
+ template<typename... Args>
+ std::pair<iterator_base, bool> insert_impl(no_key, Args&&... args)
+ {
+ // Construct the node regardless - in order to get the key.
+ // It will be discarded if it isn't used
+ node_constructor a(data_.allocators_);
+ a.construct(std::forward<Args>(args)...);
+
+ // No side effects in this initial code
+ key_type const& k = extract_key(a.get()->value_);
+ size_type hash_value = hash_function()(k);
+ bucket_ptr bucket = data_.bucket_ptr_from_hash(hash_value);
+ link_ptr pos = find_iterator(bucket, k);
+
+ if (BOOST_UNORDERED_BORLAND_BOOL(pos)) {
+ // Found an existing key, return it (no throw).
+ return std::pair<iterator_base, bool>(
+ iterator_base(bucket, pos), false);
+ } else {
+ // reserve has basic exception safety if the hash function
+ // throws, strong otherwise.
+ if(reserve(size() + 1))
+ bucket = data_.bucket_ptr_from_hash(hash_value);
+
+ // Nothing after this point can throw.
+
+ return std::pair<iterator_base, bool>(iterator_base(bucket,
+ data_.link_node_in_bucket(a, bucket)), true);
+ }
+ }
+
+ // Insert (unique keys)
+ // (I'm using an overloaded insert for both 'insert' and 'emplace')
+
+ // if hash function throws, basic exception safety
+ // strong otherwise
+ template<typename... Args>
+ iterator_base insert_hint(iterator_base const& it, Args&&... args)
+ {
+ // Life is complicated - just call the normal implementation.
+ return insert(std::forward<Args>(args)...).first;
+ }
+#endif
+
             // Insert from iterators (unique keys)
 
             template <typename I>
@@ -1742,9 +2044,9 @@
                 for (; i != j; ++i) {
                     // No side effects in this initial code
                     size_type hash_value = hash_function()(extract_key(*i));
- bucket_ptr bucket = data_.bucket_from_hash(hash_value);
+ bucket_ptr bucket = data_.bucket_ptr_from_hash(hash_value);
                     link_ptr pos = find_iterator(bucket, extract_key(*i));
-
+
                     if (!BOOST_UNORDERED_BORLAND_BOOL(pos)) {
                         // Doesn't already exist, add to bucket.
                         // Side effects only in this block.
@@ -1757,7 +2059,7 @@
                         // throws, strong otherwise.
                         if(size() + 1 >= max_load_) {
                             reserve(size() + insert_size(i, j));
- bucket = data_.bucket_from_hash(hash_value);
+ bucket = data_.bucket_ptr_from_hash(hash_value);
                         }
 
                         // Nothing after this point can throw.
@@ -1871,7 +2173,7 @@
         };
 
         // Iterators
-
+
         template <typename Alloc> class BOOST_UNORDERED_ITERATOR;
         template <typename Alloc> class BOOST_UNORDERED_CONST_ITERATOR;
         template <typename Alloc> class BOOST_UNORDERED_LOCAL_ITERATOR;
@@ -2035,4 +2337,3 @@
 #undef BOOST_UNORDERED_CONST_ITERATOR
 #undef BOOST_UNORDERED_LOCAL_ITERATOR
 #undef BOOST_UNORDERED_CONST_LOCAL_ITERATOR
-

Modified: branches/doc/boost/unordered/detail/move.hpp
==============================================================================
--- branches/doc/boost/unordered/detail/move.hpp (original)
+++ branches/doc/boost/unordered/detail/move.hpp 2008-04-27 04:13:25 EDT (Sun, 27 Apr 2008)
@@ -69,14 +69,14 @@
 /*************************************************************************************************/
 
 /*
- REVISIT (sparent_at_[hidden]): This is a work around for Boost 1.34.1 and VC++ 2008 where
- boost::is_convertible<T, T> fails to compile.
+ REVISIT (sparent_at_[hidden]): This is a work around for Boost 1.34.1 and VC++ 2008 where
+ boost::is_convertible<T, T> fails to compile.
 */
 
 template <typename T, typename U>
 struct is_convertible : boost::mpl::or_<
- boost::is_same<T, U>,
- boost::is_convertible<T, U>
+ boost::is_same<T, U>,
+ boost::is_convertible<T, U>
> { };
 
 /*************************************************************************************************/

Modified: branches/doc/boost/unordered_map.hpp
==============================================================================
--- branches/doc/boost/unordered_map.hpp (original)
+++ branches/doc/boost/unordered_map.hpp 2008-04-27 04:13:25 EDT (Sun, 27 Apr 2008)
@@ -199,6 +199,21 @@
 
         // modifiers
 
+#if defined(BOOST_HAS_RVALUE_REFS) && defined(BOOST_HAS_VARIADIC_TMPL)
+ template <class... Args>
+ std::pair<iterator, bool> emplace(Args&&... args)
+ {
+ return boost::unordered_detail::pair_cast<iterator, bool>(
+ base.insert(std::forward<Args>(args)...));
+ }
+
+ template <class... Args>
+ iterator emplace(const_iterator hint, Args&&... args)
+ {
+ return iterator(base.insert_hint(get(hint), std::forward<Args>(args)...));
+ }
+#endif
+
         std::pair<iterator, bool> insert(const value_type& obj)
         {
             return boost::unordered_detail::pair_cast<iterator, bool>(
@@ -553,6 +568,20 @@
 
         // modifiers
 
+#if defined(BOOST_HAS_RVALUE_REFS) && defined(BOOST_HAS_VARIADIC_TMPL)
+ template <class... Args>
+ iterator emplace(Args&&... args)
+ {
+ return iterator(base.insert(std::forward<Args>(args)...));
+ }
+
+ template <class... Args>
+ iterator emplace(const_iterator hint, Args&&... args)
+ {
+ return iterator(base.insert_hint(get(hint), std::forward<Args>(args)...));
+ }
+#endif
+
         iterator insert(const value_type& obj)
         {
             return iterator(base.insert(obj));

Modified: branches/doc/boost/unordered_set.hpp
==============================================================================
--- branches/doc/boost/unordered_set.hpp (original)
+++ branches/doc/boost/unordered_set.hpp 2008-04-27 04:13:25 EDT (Sun, 27 Apr 2008)
@@ -196,6 +196,22 @@
 
         // modifiers
 
+#if defined(BOOST_HAS_RVALUE_REFS) && defined(BOOST_HAS_VARIADIC_TMPL)
+ template <class... Args>
+ std::pair<iterator, bool> emplace(Args&&... args)
+ {
+ return boost::unordered_detail::pair_cast<iterator, bool>(
+ base.insert(std::forward<Args>(args)...));
+ }
+
+ template <class... Args>
+ iterator emplace(const_iterator hint, Args&&... args)
+ {
+ return iterator(
+ base.insert_hint(get(hint), std::forward<Args>(args)...));
+ }
+#endif
+
         std::pair<iterator, bool> insert(const value_type& obj)
         {
             return boost::unordered_detail::pair_cast<iterator, bool>(
@@ -520,6 +536,20 @@
 
         // modifiers
 
+#if defined(BOOST_HAS_RVALUE_REFS) && defined(BOOST_HAS_VARIADIC_TMPL)
+ template <class... Args>
+ iterator emplace(Args&&... args)
+ {
+ return iterator(base.insert(std::forward<Args>(args)...));
+ }
+
+ template <class... Args>
+ iterator emplace(const_iterator hint, Args&&... args)
+ {
+ return iterator(base.insert_hint(get(hint), std::forward<Args>(args)...));
+ }
+#endif
+
         iterator insert(const value_type& obj)
         {
             return iterator(base.insert(obj));

Modified: branches/doc/boost/utility/addressof.hpp
==============================================================================
--- branches/doc/boost/utility/addressof.hpp (original)
+++ branches/doc/boost/utility/addressof.hpp 2008-04-27 04:13:25 EDT (Sun, 27 Apr 2008)
@@ -1,6 +1,7 @@
 // Copyright (C) 2002 Brad King (brad.king_at_[hidden])
 // Douglas Gregor (gregod_at_[hidden])
-// Peter Dimov
+//
+// Copyright (C) 2002, 2008 Peter Dimov
 //
 // Distributed under the Boost Software License, Version 1.0. (See
 // accompanying file LICENSE_1_0.txt or copy at
@@ -14,27 +15,31 @@
 # include <boost/config.hpp>
 # include <boost/detail/workaround.hpp>
 
-namespace boost {
-
-// Do not make addressof() inline. Breaks MSVC 7. (Peter Dimov)
+namespace boost
+{
 
-// VC7 strips const from nested classes unless we add indirection here
-# if BOOST_WORKAROUND(BOOST_MSVC, == 1300)
+namespace detail
+{
 
-template<class T> struct _addp
+template<class T> struct addressof_impl
 {
- typedef T * type;
+ static inline T * f( T & v, long )
+ {
+ return reinterpret_cast<T*>(
+ &const_cast<char&>(reinterpret_cast<const volatile char &>(v)));
+ }
+
+ static inline T * f( T * v, int )
+ {
+ return v;
+ }
 };
-
-template <typename T> typename _addp<T>::type
 
-# else
-template <typename T> T*
-# endif
-addressof(T& v)
+} // namespace detail
+
+template<class T> T * addressof( T & v )
 {
- return reinterpret_cast<T*>(
- &const_cast<char&>(reinterpret_cast<const volatile char &>(v)));
+ return boost::detail::addressof_impl<T>::f( v, 0 );
 }
 
 // Borland doesn't like casting an array reference to a char reference
@@ -53,6 +58,6 @@
 }
 # endif
 
-}
+} // namespace boost
 
 #endif // BOOST_UTILITY_ADDRESSOF_HPP

Modified: branches/doc/boost/wave/cpplexer/cpp_lex_iterator.hpp
==============================================================================
--- branches/doc/boost/wave/cpplexer/cpp_lex_iterator.hpp (original)
+++ branches/doc/boost/wave/cpplexer/cpp_lex_iterator.hpp 2008-04-27 04:13:25 EDT (Sun, 27 Apr 2008)
@@ -57,11 +57,16 @@
 
 public:
     lex_iterator_functor_shim()
-#if 0 != __DECCXX_VER || BOOST_INTEL_CXX_VERSION > 900 || defined(__PGI)
+#if /*0 != __DECCXX_VER || */defined(__PGI)
       : eof()
 #endif
     {}
 
+#if BOOST_WORKAROUND(BOOST_MSVC, <= 1310)
+ lex_iterator_functor_shim& operator= (lex_iterator_functor_shim const& rhs)
+ { return *this; } // nothing to do here
+#endif
+
 // interface to the multi_pass_policies::split_functor_input policy
     typedef TokenT result_type;
     typedef lex_iterator_functor_shim unique;
@@ -153,7 +158,7 @@
     typedef boost::spirit::multi_pass_policies::split_std_deque storage_policy;
     
     typedef boost::spirit::multi_pass_policies::default_policy<
- input_policy, ownership_policy, check_policy, storage_policy>
+ ownership_policy, check_policy, input_policy, storage_policy>
         policy_type;
     typedef boost::spirit::multi_pass<functor_data_type, policy_type> type;
 };

Modified: branches/doc/boost/wave/util/macro_helpers.hpp
==============================================================================
--- branches/doc/boost/wave/util/macro_helpers.hpp (original)
+++ branches/doc/boost/wave/util/macro_helpers.hpp 2008-04-27 04:13:25 EDT (Sun, 27 Apr 2008)
@@ -260,11 +260,11 @@
     inline boost::wave::token_id
     skip_whitespace(IteratorT &first, IteratorT const &last)
     {
- token_id id = next_token<IteratorT>::peek(first, last, false);
+ token_id id = util::impl::next_token<IteratorT>::peek(first, last, false);
         if (IS_CATEGORY(id, WhiteSpaceTokenType)) {
             do {
                 ++first;
- id = next_token<IteratorT>::peek(first, last, false);
+ id = util::impl::next_token<IteratorT>::peek(first, last, false);
             } while (IS_CATEGORY(id, WhiteSpaceTokenType));
         }
         ++first;
@@ -277,11 +277,11 @@
     {
         queue.push_back (*first); // queue up the current token
         
- token_id id = next_token<IteratorT>::peek(first, last, false);
+ token_id id = util::impl::next_token<IteratorT>::peek(first, last, false);
         if (IS_CATEGORY(id, WhiteSpaceTokenType)) {
             do {
                 queue.push_back(*++first); // queue up the next whitespace
- id = next_token<IteratorT>::peek(first, last, false);
+ id = util::impl::next_token<IteratorT>::peek(first, last, false);
             } while (IS_CATEGORY(id, WhiteSpaceTokenType));
         }
         ++first;

Modified: branches/doc/libs/asio/doc/design/implementation.qbk
==============================================================================
--- branches/doc/libs/asio/doc/design/implementation.qbk (original)
+++ branches/doc/libs/asio/doc/design/implementation.qbk 2008-04-27 04:13:25 EDT (Sun, 27 Apr 2008)
@@ -29,6 +29,9 @@
 resolution. This thread is created on the first call to either
 `ip::tcp::resolver::async_resolve()` or `ip::udp::resolver::async_resolve()`.
 
+Scatter-Gather:
+
+* At most `min(64,IOV_MAX)` buffers may be transferred in a single operation.
 
 [heading Linux Kernel 2.6]
 
@@ -46,6 +49,10 @@
 resolution. This thread is created on the first call to either
 `ip::tcp::resolver::async_resolve()` or `ip::udp::resolver::async_resolve()`.
 
+Scatter-Gather:
+
+* At most `min(64,IOV_MAX)` buffers may be transferred in a single operation.
+
 
 [heading Solaris]
 
@@ -63,6 +70,10 @@
 resolution. This thread is created on the first call to either
 `ip::tcp::resolver::async_resolve()` or `ip::udp::resolver::async_resolve()`.
 
+Scatter-Gather:
+
+* At most `min(64,IOV_MAX)` buffers may be transferred in a single operation.
+
 
 [heading QNX Neutrino]
 
@@ -81,6 +92,10 @@
 resolution. This thread is created on the first call to either
 `ip::tcp::resolver::async_resolve()` or `ip::udp::resolver::async_resolve()`.
 
+Scatter-Gather:
+
+* At most `min(64,IOV_MAX)` buffers may be transferred in a single operation.
+
 
 [heading Mac OS X]
 
@@ -98,6 +113,10 @@
 resolution. This thread is created on the first call to either
 `ip::tcp::resolver::async_resolve()` or `ip::udp::resolver::async_resolve()`.
 
+Scatter-Gather:
+
+* At most `min(64,IOV_MAX)` buffers may be transferred in a single operation.
+
 
 [heading FreeBSD]
 
@@ -115,6 +134,10 @@
 resolution. This thread is created on the first call to either
 `ip::tcp::resolver::async_resolve()` or `ip::udp::resolver::async_resolve()`.
 
+Scatter-Gather:
+
+* At most `min(64,IOV_MAX)` buffers may be transferred in a single operation.
+
 
 [heading AIX]
 
@@ -133,6 +156,10 @@
 resolution. This thread is created on the first call to either
 `ip::tcp::resolver::async_resolve()` or `ip::udp::resolver::async_resolve()`.
 
+Scatter-Gather:
+
+* At most `min(64,IOV_MAX)` buffers may be transferred in a single operation.
+
 
 [heading HP-UX]
 
@@ -151,6 +178,10 @@
 resolution. This thread is created on the first call to either
 `ip::tcp::resolver::async_resolve()` or `ip::udp::resolver::async_resolve()`.
 
+Scatter-Gather:
+
+* At most `min(64,IOV_MAX)` buffers may be transferred in a single operation.
+
 
 [heading Tru64]
 
@@ -169,6 +200,10 @@
 resolution. This thread is created on the first call to either
 `ip::tcp::resolver::async_resolve()` or `ip::udp::resolver::async_resolve()`.
 
+Scatter-Gather:
+
+* At most `min(64,IOV_MAX)` buffers may be transferred in a single operation.
+
 
 [heading Windows 95, 98 and Me]
 
@@ -186,6 +221,10 @@
 resolution. This thread is created on the first call to either
 `ip::tcp::resolver::async_resolve()` or `ip::udp::resolver::async_resolve()`.
 
+Scatter-Gather:
+
+* For sockets, at most 16 buffers may be transferred in a single operation.
+
 
 [heading Windows NT, 2000, XP, 2003 and Vista]
 
@@ -209,5 +248,12 @@
 resolution. This thread is created on the first call to either
 `ip::tcp::resolver::async_resolve()` or `ip::udp::resolver::async_resolve()`.
 
+Scatter-Gather:
+
+* For sockets, at most 64 buffers may be transferred in a single operation.
+
+* For stream-oriented handles, only one buffer may be transferred in a single
+operation.
+
 
 [endsect]

Modified: branches/doc/libs/asio/doc/quickref.xml
==============================================================================
--- branches/doc/libs/asio/doc/quickref.xml (original)
+++ branches/doc/libs/asio/doc/quickref.xml 2008-04-27 04:13:25 EDT (Sun, 27 Apr 2008)
@@ -37,13 +37,24 @@
             <listitem><link linkend="boost_asio.reference.ip__udp.endpoint">ip::udp::endpoint</link></listitem>
             <listitem><link linkend="boost_asio.reference.ip__udp.resolver">ip::udp::resolver</link></listitem>
             <listitem><link linkend="boost_asio.reference.ip__udp.socket">ip::udp::socket</link></listitem>
+ <listitem><link linkend="boost_asio.reference.local__stream_protocol">local::stream_protocol</link></listitem>
+ <listitem><link linkend="boost_asio.reference.local__stream_protocol.acceptor">local::stream_protocol::acceptor</link></listitem>
+ <listitem><link linkend="boost_asio.reference.local__stream_protocol.endpoint">local::stream_protocol::endpoint</link></listitem>
+ <listitem><link linkend="boost_asio.reference.local__stream_protocol.iostream">local::stream_protocol::iostream</link></listitem>
+ <listitem><link linkend="boost_asio.reference.local__stream_protocol.socket">local::stream_protocol::socket</link></listitem>
+ <listitem><link linkend="boost_asio.reference.local__datagram_protocol">local::datagram_protocol</link></listitem>
+ <listitem><link linkend="boost_asio.reference.local__datagram_protocol.endpoint">local::datagram_protocol::endpoint</link></listitem>
+ <listitem><link linkend="boost_asio.reference.local__datagram_protocol.socket">local::datagram_protocol::socket</link></listitem>
             <listitem><link linkend="boost_asio.reference.mutable_buffer">mutable_buffer</link></listitem>
             <listitem><link linkend="boost_asio.reference.mutable_buffers_1">mutable_buffers_1</link></listitem>
+ <listitem><link linkend="boost_asio.reference.posix__descriptor_base">posix::descriptor_base</link></listitem>
+ <listitem><link linkend="boost_asio.reference.posix__stream_descriptor">posix::stream_descriptor</link></listitem>
             <listitem><link linkend="boost_asio.reference.socket_base">socket_base</link></listitem>
             <listitem><link linkend="boost_asio.reference.ssl__context">ssl::context</link></listitem>
             <listitem><link linkend="boost_asio.reference.ssl__context_base">ssl::context_base</link></listitem>
             <listitem><link linkend="boost_asio.reference.ssl__stream_base">ssl::stream_base</link></listitem>
             <listitem><link linkend="boost_asio.reference.streambuf">streambuf</link></listitem>
+ <listitem><link linkend="boost_asio.reference.windows__stream_handle">windows::stream_handle</link></listitem>
           </itemizedlist>
         </entry>
         <entry valign="top">
@@ -66,18 +77,25 @@
             <listitem><link linkend="boost_asio.reference.ip__basic_resolver_entry">ip::basic_resolver_entry</link></listitem>
             <listitem><link linkend="boost_asio.reference.ip__basic_resolver_iterator">ip::basic_resolver_iterator</link></listitem>
             <listitem><link linkend="boost_asio.reference.ip__basic_resolver_query">ip::basic_resolver_query</link></listitem>
+ <listitem><link linkend="boost_asio.reference.local__basic_endpoint">local::basic_endpoint</link></listitem>
+ <listitem><link linkend="boost_asio.reference.posix__basic_descriptor">posix::basic_descriptor</link></listitem>
+ <listitem><link linkend="boost_asio.reference.posix__basic_stream_descriptor">posix::basic_stream_descriptor</link></listitem>
             <listitem><link linkend="boost_asio.reference.ssl__basic_context">ssl::basic_context</link></listitem>
             <listitem><link linkend="boost_asio.reference.ssl__stream">ssl::stream</link></listitem>
+ <listitem><link linkend="boost_asio.reference.windows__basic_handle">windows::basic_handle</link></listitem>
+ <listitem><link linkend="boost_asio.reference.windows__basic_stream_handle">windows::basic_stream_handle</link></listitem>
           </itemizedlist>
           <bridgehead renderas="sect3">Services</bridgehead>
           <itemizedlist>
             <listitem><link linkend="boost_asio.reference.datagram_socket_service">datagram_socket_service</link></listitem>
             <listitem><link linkend="boost_asio.reference.deadline_timer_service">deadline_timer_service</link></listitem>
             <listitem><link linkend="boost_asio.reference.ip__resolver_service">ip::resolver_service</link></listitem>
+ <listitem><link linkend="boost_asio.reference.posix__stream_descriptor_service">posix::stream_descriptor_service</link></listitem>
             <listitem><link linkend="boost_asio.reference.socket_acceptor_service">socket_acceptor_service</link></listitem>
             <listitem><link linkend="boost_asio.reference.ssl__context_service">ssl::context_service</link></listitem>
             <listitem><link linkend="boost_asio.reference.ssl__stream_service">ssl::stream_service</link></listitem>
             <listitem><link linkend="boost_asio.reference.stream_socket_service">stream_socket_service</link></listitem>
+ <listitem><link linkend="boost_asio.reference.windows__stream_handle_service">windows::stream_handle_service</link></listitem>
           </itemizedlist>
           <bridgehead renderas="sect3">Placeholders</bridgehead>
           <itemizedlist>
@@ -99,6 +117,7 @@
             <listitem><link linkend="boost_asio.reference.buffer">buffer</link></listitem>
             <listitem><link linkend="boost_asio.reference.has_service">has_service</link></listitem>
             <listitem><link linkend="boost_asio.reference.ip__host_name">ip::host_name</link></listitem>
+ <listitem><link linkend="boost_asio.reference.local__connect_pair">local::connect_pair</link></listitem>
             <listitem><link linkend="boost_asio.reference.read">read</link></listitem>
             <listitem><link linkend="boost_asio.reference.read_until">read_until</link></listitem>
             <listitem><link linkend="boost_asio.reference.transfer_all">transfer_all</link></listitem>
@@ -132,9 +151,11 @@
             <listitem><link linkend="boost_asio.reference.ConvertibleToConstBuffer">ConvertibleToConstBuffer</link></listitem>
             <listitem><link linkend="boost_asio.reference.ConvertibleToMutableBuffer">ConvertibleToMutableBuffer</link></listitem>
             <listitem><link linkend="boost_asio.reference.DatagramSocketService">DatagramSocketService</link></listitem>
+ <listitem><link linkend="boost_asio.reference.DescriptorService">DescriptorService</link></listitem>
             <listitem><link linkend="boost_asio.reference.Endpoint">Endpoint</link></listitem>
             <listitem><link linkend="boost_asio.reference.GettableSocketOption">GettableSocketOption</link></listitem>
             <listitem><link linkend="boost_asio.reference.Handler">Handler</link></listitem>
+ <listitem><link linkend="boost_asio.reference.HandleService">HandleService</link></listitem>
             <listitem><link linkend="boost_asio.reference.InternetProtocol">InternetProtocol</link></listitem>
             <listitem><link linkend="boost_asio.reference.IoControlCommand">IoControlCommand</link></listitem>
             <listitem><link linkend="boost_asio.reference.IoObjectService">IoObjectService</link></listitem>
@@ -147,6 +168,8 @@
             <listitem><link linkend="boost_asio.reference.SettableSocketOption">SettableSocketOption</link></listitem>
             <listitem><link linkend="boost_asio.reference.SocketAcceptorService">SocketAcceptorService</link></listitem>
             <listitem><link linkend="boost_asio.reference.SocketService">SocketService</link></listitem>
+ <listitem><link linkend="boost_asio.reference.StreamDescriptorService">StreamDescriptorService</link></listitem>
+ <listitem><link linkend="boost_asio.reference.StreamHandleService">StreamHandleService</link></listitem>
             <listitem><link linkend="boost_asio.reference.StreamSocketService">StreamSocketService</link></listitem>
             <listitem><link linkend="boost_asio.reference.SyncReadStream">SyncReadStream</link></listitem>
             <listitem><link linkend="boost_asio.reference.SyncWriteStream">SyncWriteStream</link></listitem>

Modified: branches/doc/libs/asio/doc/reference.dox
==============================================================================
--- branches/doc/libs/asio/doc/reference.dox (original)
+++ branches/doc/libs/asio/doc/reference.dox 2008-04-27 04:13:25 EDT (Sun, 27 Apr 2008)
@@ -76,7 +76,10 @@
                          ./../../../boost/asio \
                          ./../../../boost/asio/impl \
                          ./../../../boost/asio/ip \
+ ./../../../boost/asio/local \
+ ./../../../boost/asio/posix \
                          ./../../../boost/asio/ssl \
+ ./../../../boost/asio/windows \
                          ./noncopyable_dox.txt \
                          ./std_exception_dox.txt
 FILE_PATTERNS =

Modified: branches/doc/libs/asio/doc/reference.qbk
==============================================================================
--- branches/doc/libs/asio/doc/reference.qbk (original)
+++ branches/doc/libs/asio/doc/reference.qbk 2008-04-27 04:13:25 EDT (Sun, 27 Apr 2008)
@@ -19,9 +19,11 @@
 [include requirements/ConvertibleToConstBuffer.qbk]
 [include requirements/ConvertibleToMutableBuffer.qbk]
 [include requirements/DatagramSocketService.qbk]
+[include requirements/DescriptorService.qbk]
 [include requirements/Endpoint.qbk]
 [include requirements/GettableSocketOption.qbk]
 [include requirements/Handler.qbk]
+[include requirements/HandleService.qbk]
 [include requirements/InternetProtocol.qbk]
 [include requirements/IoControlCommand.qbk]
 [include requirements/IoObjectService.qbk]
@@ -34,6 +36,8 @@
 [include requirements/SettableSocketOption.qbk]
 [include requirements/SocketAcceptorService.qbk]
 [include requirements/SocketService.qbk]
+[include requirements/StreamDescriptorService.qbk]
+[include requirements/StreamHandleService.qbk]
 [include requirements/StreamSocketService.qbk]
 [include requirements/SyncReadStream.qbk]
 [include requirements/SyncWriteStream.qbk]
@@ -1495,6 +1499,22 @@
 
 ]
 
+[heading Protected Data Members]
+[table
+ [[Name][Description]]
+
+ [
+ [[link boost_asio.reference.basic_datagram_socket.implementation [*implementation]]]
+ [The underlying implementation of the I/O object. ]
+ ]
+
+ [
+ [[link boost_asio.reference.basic_datagram_socket.service [*service]]]
+ [The service associated with the I/O object. ]
+ ]
+
+]
+
 The basic_datagram_socket class template provides asynchronous and blocking datagram-oriented socket functionality.
 
 
@@ -3207,6 +3227,21 @@
 [endsect]
 
 
+[section:implementation basic_datagram_socket::implementation]
+
+
+['Inherited from basic_io_object.]
+
+The underlying implementation of the I/O object.
+
+ implementation_type implementation;
+
+
+
+[endsect]
+
+
+
 [section:implementation_type basic_datagram_socket::implementation_type]
 
 
@@ -3862,6 +3897,17 @@
   
 ]
 
+[heading Protected Member Functions]
+[table
+ [[Name][Description]]
+
+ [
+ [[link boost_asio.reference.basic_socket._basic_socket [*~basic_socket]]]
+ [Protected destructor to prevent deletion through this type. ]
+ ]
+
+]
+
 [heading Data Members]
 [table
   [[Name][Description]]
@@ -3888,6 +3934,22 @@
 
 ]
 
+[heading Protected Data Members]
+[table
+ [[Name][Description]]
+
+ [
+ [[link boost_asio.reference.basic_socket.implementation [*implementation]]]
+ [The underlying implementation of the I/O object. ]
+ ]
+
+ [
+ [[link boost_asio.reference.basic_socket.service [*service]]]
+ [The service associated with the I/O object. ]
+ ]
+
+]
+
 The basic_socket class template provides functionality that is common to both stream-oriented and datagram-oriented sockets.
 
 
@@ -5165,6 +5227,21 @@
 [endsect]
 
 
+[section:service basic_datagram_socket::service]
+
+
+['Inherited from basic_io_object.]
+
+The service associated with the I/O object.
+
+ service_type & service;
+
+
+
+[endsect]
+
+
+
 [section:service_type basic_datagram_socket::service_type]
 
 
@@ -5539,6 +5616,22 @@
   
 ]
 
+[heading Protected Data Members]
+[table
+ [[Name][Description]]
+
+ [
+ [[link boost_asio.reference.basic_deadline_timer.implementation [*implementation]]]
+ [The underlying implementation of the I/O object. ]
+ ]
+
+ [
+ [[link boost_asio.reference.basic_deadline_timer.service [*service]]]
+ [The service associated with the I/O object. ]
+ ]
+
+]
+
 The basic_deadline_timer class template provides the ability to perform a blocking or asynchronous wait for a timer to expire.
 
 Most applications will use the boost::asio::deadline\_timer typedef.
@@ -6081,6 +6174,21 @@
 
 
 
+[section:implementation basic_deadline_timer::implementation]
+
+
+['Inherited from basic_io_object.]
+
+The underlying implementation of the I/O object.
+
+ implementation_type implementation;
+
+
+
+[endsect]
+
+
+
 [section:implementation_type basic_deadline_timer::implementation_type]
 
 
@@ -6120,6 +6228,21 @@
 
 
 
+[section:service basic_deadline_timer::service]
+
+
+['Inherited from basic_io_object.]
+
+The service associated with the I/O object.
+
+ service_type & service;
+
+
+
+[endsect]
+
+
+
 [section:service_type basic_deadline_timer::service_type]
 
 
@@ -6272,6 +6395,58 @@
   
 ]
 
+[heading Protected Member Functions]
+[table
+ [[Name][Description]]
+
+ [
+ [[link boost_asio.reference.basic_io_object.basic_io_object [*basic_io_object]]]
+ [Construct a basic_io_object. ]
+ ]
+
+ [
+ [[link boost_asio.reference.basic_io_object._basic_io_object [*~basic_io_object]]]
+ [Protected destructor to prevent deletion through this type. ]
+ ]
+
+]
+
+[heading Protected Data Members]
+[table
+ [[Name][Description]]
+
+ [
+ [[link boost_asio.reference.basic_io_object.implementation [*implementation]]]
+ [The underlying implementation of the I/O object. ]
+ ]
+
+ [
+ [[link boost_asio.reference.basic_io_object.service [*service]]]
+ [The service associated with the I/O object. ]
+ ]
+
+]
+
+
+[section:basic_io_object basic_io_object::basic_io_object]
+
+Construct a basic_io_object.
+
+ basic_io_object(
+ boost::asio::io_service & io_service);
+
+
+Performs:
+
+ service.construct(implementation);
+
+
+
+
+
+[endsect]
+
+
 
 [section:get_io_service basic_io_object::get_io_service]
 
@@ -6293,6 +6468,18 @@
 
 
 
+[section:implementation basic_io_object::implementation]
+
+The underlying implementation of the I/O object.
+
+ implementation_type implementation;
+
+
+
+[endsect]
+
+
+
 [section:implementation_type basic_io_object::implementation_type]
 
 The underlying implementation type of I/O object.
@@ -6326,6 +6513,18 @@
 
 
 
+[section:service basic_io_object::service]
+
+The service associated with the I/O object.
+
+ service_type & service;
+
+
+
+[endsect]
+
+
+
 [section:service_type basic_io_object::service_type]
 
 The type of the service that will be used to provide I/O operations.
@@ -6339,6 +6538,25 @@
 
 
 
+[section:_basic_io_object basic_io_object::~basic_io_object]
+
+Protected destructor to prevent deletion through this type.
+
+ ~basic_io_object();
+
+
+Performs:
+
+ service.destroy(implementation);
+
+
+
+
+
+[endsect]
+
+
+
 [endsect]
 
 [section:basic_socket basic_socket]
@@ -6617,6 +6835,17 @@
   
 ]
 
+[heading Protected Member Functions]
+[table
+ [[Name][Description]]
+
+ [
+ [[link boost_asio.reference.basic_socket._basic_socket [*~basic_socket]]]
+ [Protected destructor to prevent deletion through this type. ]
+ ]
+
+]
+
 [heading Data Members]
 [table
   [[Name][Description]]
@@ -6643,6 +6872,22 @@
 
 ]
 
+[heading Protected Data Members]
+[table
+ [[Name][Description]]
+
+ [
+ [[link boost_asio.reference.basic_socket.implementation [*implementation]]]
+ [The underlying implementation of the I/O object. ]
+ ]
+
+ [
+ [[link boost_asio.reference.basic_socket.service [*service]]]
+ [The service associated with the I/O object. ]
+ ]
+
+]
+
 The basic_socket class template provides functionality that is common to both stream-oriented and datagram-oriented sockets.
 
 
@@ -7818,6 +8063,21 @@
 [endsect]
 
 
+[section:implementation basic_socket::implementation]
+
+
+['Inherited from basic_io_object.]
+
+The underlying implementation of the I/O object.
+
+ implementation_type implementation;
+
+
+
+[endsect]
+
+
+
 [section:implementation_type basic_socket::implementation_type]
 
 
@@ -8460,6 +8720,17 @@
   
 ]
 
+[heading Protected Member Functions]
+[table
+ [[Name][Description]]
+
+ [
+ [[link boost_asio.reference.basic_socket._basic_socket [*~basic_socket]]]
+ [Protected destructor to prevent deletion through this type. ]
+ ]
+
+]
+
 [heading Data Members]
 [table
   [[Name][Description]]
@@ -8486,6 +8757,22 @@
 
 ]
 
+[heading Protected Data Members]
+[table
+ [[Name][Description]]
+
+ [
+ [[link boost_asio.reference.basic_socket.implementation [*implementation]]]
+ [The underlying implementation of the I/O object. ]
+ ]
+
+ [
+ [[link boost_asio.reference.basic_socket.service [*service]]]
+ [The service associated with the I/O object. ]
+ ]
+
+]
+
 The basic_socket class template provides functionality that is common to both stream-oriented and datagram-oriented sockets.
 
 
@@ -9064,6 +9351,21 @@
 
 
 
+[section:service basic_socket::service]
+
+
+['Inherited from basic_io_object.]
+
+The service associated with the I/O object.
+
+ service_type & service;
+
+
+
+[endsect]
+
+
+
 [section:service_type basic_socket::service_type]
 
 
@@ -9333,6 +9635,18 @@
 
 
 
+[section:_basic_socket basic_socket::~basic_socket]
+
+Protected destructor to prevent deletion through this type.
+
+ ~basic_socket();
+
+
+
+[endsect]
+
+
+
 [endsect]
 
 [section:basic_socket_acceptor basic_socket_acceptor]
@@ -9605,6 +9919,22 @@
 
 ]
 
+[heading Protected Data Members]
+[table
+ [[Name][Description]]
+
+ [
+ [[link boost_asio.reference.basic_socket_acceptor.implementation [*implementation]]]
+ [The underlying implementation of the I/O object. ]
+ ]
+
+ [
+ [[link boost_asio.reference.basic_socket_acceptor.service [*service]]]
+ [The service associated with the I/O object. ]
+ ]
+
+]
+
 The basic_socket_acceptor class template is used for accepting new socket connections.
 
 
@@ -10818,6 +11148,21 @@
 [endsect]
 
 
+[section:implementation basic_socket_acceptor::implementation]
+
+
+['Inherited from basic_io_object.]
+
+The underlying implementation of the I/O object.
+
+ implementation_type implementation;
+
+
+
+[endsect]
+
+
+
 [section:implementation_type basic_socket_acceptor::implementation_type]
 
 
@@ -11611,6 +11956,21 @@
 
 
 
+[section:service basic_socket_acceptor::service]
+
+
+['Inherited from basic_io_object.]
+
+The service associated with the I/O object.
+
+ service_type & service;
+
+
+
+[endsect]
+
+
+
 [section:service_type basic_socket_acceptor::service_type]
 
 
@@ -12192,6 +12552,32 @@
   
 ]
 
+[heading Protected Member Functions]
+[table
+ [[Name][Description]]
+
+ [
+ [[link boost_asio.reference.basic_socket_streambuf.overflow [*overflow]]]
+ []
+ ]
+
+ [
+ [[link boost_asio.reference.basic_socket_streambuf.setbuf [*setbuf]]]
+ []
+ ]
+
+ [
+ [[link boost_asio.reference.basic_socket_streambuf.sync [*sync]]]
+ []
+ ]
+
+ [
+ [[link boost_asio.reference.basic_socket_streambuf.underflow [*underflow]]]
+ []
+ ]
+
+]
+
 [heading Data Members]
 [table
   [[Name][Description]]
@@ -12218,6 +12604,22 @@
 
 ]
 
+[heading Protected Data Members]
+[table
+ [[Name][Description]]
+
+ [
+ [[link boost_asio.reference.basic_socket_streambuf.implementation [*implementation]]]
+ [The underlying implementation of the I/O object. ]
+ ]
+
+ [
+ [[link boost_asio.reference.basic_socket_streambuf.service [*service]]]
+ [The service associated with the I/O object. ]
+ ]
+
+]
+
 [section:assign basic_socket_streambuf::assign]
 
 Assign an existing native socket to the socket.
@@ -13262,6 +13664,21 @@
 [endsect]
 
 
+[section:implementation basic_socket_streambuf::implementation]
+
+
+['Inherited from basic_io_object.]
+
+The underlying implementation of the I/O object.
+
+ implementation_type implementation;
+
+
+
+[endsect]
+
+
+
 [section:implementation_type basic_socket_streambuf::implementation_type]
 
 
@@ -13917,6 +14334,17 @@
   
 ]
 
+[heading Protected Member Functions]
+[table
+ [[Name][Description]]
+
+ [
+ [[link boost_asio.reference.basic_socket._basic_socket [*~basic_socket]]]
+ [Protected destructor to prevent deletion through this type. ]
+ ]
+
+]
+
 [heading Data Members]
 [table
   [[Name][Description]]
@@ -13943,6 +14371,22 @@
 
 ]
 
+[heading Protected Data Members]
+[table
+ [[Name][Description]]
+
+ [
+ [[link boost_asio.reference.basic_socket.implementation [*implementation]]]
+ [The underlying implementation of the I/O object. ]
+ ]
+
+ [
+ [[link boost_asio.reference.basic_socket.service [*service]]]
+ [The service associated with the I/O object. ]
+ ]
+
+]
+
 The basic_socket class template provides functionality that is common to both stream-oriented and datagram-oriented sockets.
 
 
@@ -14208,6 +14652,19 @@
 [endsect]
 
 
+[section:overflow basic_socket_streambuf::overflow]
+
+
+
+ int_type overflow(
+ int_type c);
+
+
+
+[endsect]
+
+
+
 [section:protocol_type basic_socket_streambuf::protocol_type]
 
 
@@ -14542,6 +14999,21 @@
 
 
 
+[section:service basic_socket_streambuf::service]
+
+
+['Inherited from basic_io_object.]
+
+The service associated with the I/O object.
+
+ service_type & service;
+
+
+
+[endsect]
+
+
+
 [section:service_type basic_socket_streambuf::service_type]
 
 
@@ -14669,6 +15141,20 @@
 
 [endsect]
 
+
+[section:setbuf basic_socket_streambuf::setbuf]
+
+
+
+ std::streambuf * setbuf(
+ char_type * s,
+ std::streamsize n);
+
+
+
+[endsect]
+
+
 [section:shutdown basic_socket_streambuf::shutdown]
 
 Disable sends or receives on the socket.
@@ -14815,6 +15301,30 @@
 
 
 
+[section:sync basic_socket_streambuf::sync]
+
+
+
+ int sync();
+
+
+
+[endsect]
+
+
+
+[section:underflow basic_socket_streambuf::underflow]
+
+
+
+ int_type underflow();
+
+
+
+[endsect]
+
+
+
 [section:_basic_socket_streambuf basic_socket_streambuf::~basic_socket_streambuf]
 
 Destructor flushes buffered data.
@@ -15170,6 +15680,22 @@
 
 ]
 
+[heading Protected Data Members]
+[table
+ [[Name][Description]]
+
+ [
+ [[link boost_asio.reference.basic_stream_socket.implementation [*implementation]]]
+ [The underlying implementation of the I/O object. ]
+ ]
+
+ [
+ [[link boost_asio.reference.basic_stream_socket.service [*service]]]
+ [The service associated with the I/O object. ]
+ ]
+
+]
+
 The basic_stream_socket class template provides asynchronous and blocking stream-oriented socket functionality.
 
 
@@ -16770,6 +17296,21 @@
 [endsect]
 
 
+[section:implementation basic_stream_socket::implementation]
+
+
+['Inherited from basic_io_object.]
+
+The underlying implementation of the I/O object.
+
+ implementation_type implementation;
+
+
+
+[endsect]
+
+
+
 [section:implementation_type basic_stream_socket::implementation_type]
 
 
@@ -17425,6 +17966,17 @@
   
 ]
 
+[heading Protected Member Functions]
+[table
+ [[Name][Description]]
+
+ [
+ [[link boost_asio.reference.basic_socket._basic_socket [*~basic_socket]]]
+ [Protected destructor to prevent deletion through this type. ]
+ ]
+
+]
+
 [heading Data Members]
 [table
   [[Name][Description]]
@@ -17451,6 +18003,22 @@
 
 ]
 
+[heading Protected Data Members]
+[table
+ [[Name][Description]]
+
+ [
+ [[link boost_asio.reference.basic_socket.implementation [*implementation]]]
+ [The underlying implementation of the I/O object. ]
+ ]
+
+ [
+ [[link boost_asio.reference.basic_socket.service [*service]]]
+ [The service associated with the I/O object. ]
+ ]
+
+]
+
 The basic_socket class template provides functionality that is common to both stream-oriented and datagram-oriented sockets.
 
 
@@ -18526,6 +19094,21 @@
 
 
 
+[section:service basic_stream_socket::service]
+
+
+['Inherited from basic_io_object.]
+
+The service associated with the I/O object.
+
+ service_type & service;
+
+
+
+[endsect]
+
+
+
 [section:service_type basic_stream_socket::service_type]
 
 
@@ -18986,6 +19569,27 @@
   
 ]
 
+[heading Protected Member Functions]
+[table
+ [[Name][Description]]
+
+ [
+ [[link boost_asio.reference.basic_streambuf.overflow [*overflow]]]
+ []
+ ]
+
+ [
+ [[link boost_asio.reference.basic_streambuf.reserve [*reserve]]]
+ []
+ ]
+
+ [
+ [[link boost_asio.reference.basic_streambuf.underflow [*underflow]]]
+ []
+ ]
+
+]
+
 
 [section:basic_streambuf basic_streambuf::basic_streambuf]
 
@@ -19077,6 +19681,19 @@
 
 
 
+[section:overflow basic_streambuf::overflow]
+
+
+
+ int_type overflow(
+ int_type c);
+
+
+
+[endsect]
+
+
+
 [section:prepare basic_streambuf::prepare]
 
 Get a list of buffers that represents the put area, with the given size.
@@ -19090,6 +19707,19 @@
 
 
 
+[section:reserve basic_streambuf::reserve]
+
+
+
+ void reserve(
+ std::size_t n);
+
+
+
+[endsect]
+
+
+
 [section:size basic_streambuf::size]
 
 Return the size of the get area in characters.
@@ -19102,6 +19732,18 @@
 
 
 
+[section:underflow basic_streambuf::underflow]
+
+
+
+ int_type underflow();
+
+
+
+[endsect]
+
+
+
 [endsect]
 
 [section:buffer buffer]
@@ -21409,18 +22051,23 @@
   
 ]
 
-[heading Friends]
+[heading Related Functions]
 [table
   [[Name][Description]]
 
   [
- [[link boost_asio.reference.const_buffer.buffer_cast_helper [*buffer_cast_helper]]]
- []
+ [[link boost_asio.reference.const_buffer.buffer_cast [*buffer_cast]]]
+ [Cast a non-modifiable buffer to a specified pointer to POD type. ]
   ]
   
   [
- [[link boost_asio.reference.const_buffer.buffer_size_helper [*buffer_size_helper]]]
- []
+ [[link boost_asio.reference.const_buffer.buffer_size [*buffer_size]]]
+ [Get the number of bytes in a non-modifiable buffer. ]
+ ]
+
+ [
+ [[link boost_asio.reference.const_buffer.operator_plus_ [*operator+]]]
+ [Create a new non-modifiable buffer that is offset from the start of another. ]
   ]
   
 ]
@@ -21428,11 +22075,13 @@
 The const_buffer class provides a safe representation of a buffer that cannot be modified. It does not own the underlying data, and so is cheap to copy or assign.
 
 
-[section:buffer_cast_helper const_buffer::buffer_cast_helper]
-
+[section:buffer_cast const_buffer::buffer_cast]
 
+Cast a non-modifiable buffer to a specified pointer to POD type.
 
- friend const void * buffer_cast_helper(
+ template<
+ typename ``[link boost_asio.reference.PointerToPodType PointerToPodType]``>
+ PointerToPodType buffer_cast(
       const const_buffer & b);
 
 
@@ -21441,11 +22090,11 @@
 
 
 
-[section:buffer_size_helper const_buffer::buffer_size_helper]
-
+[section:buffer_size const_buffer::buffer_size]
 
+Get the number of bytes in a non-modifiable buffer.
 
- friend std::size_t buffer_size_helper(
+ std::size_t buffer_size(
       const const_buffer & b);
 
 
@@ -21507,34 +22156,76 @@
 
 [endsect]
 
+[section:operator_plus_ const_buffer::operator+]
 
-[endsect]
+Create a new non-modifiable buffer that is offset from the start of another.
 
-[section:const_buffers_1 const_buffers_1]
+ const_buffer ``[link boost_asio.reference.const_buffer.operator_plus_.overload1 operator+]``(
+ const const_buffer & b,
+ std::size_t start);
 
-Adapts a single non-modifiable buffer so that it meets the requirements of the ConstBufferSequence concept.
+ const_buffer ``[link boost_asio.reference.const_buffer.operator_plus_.overload2 operator+]``(
+ std::size_t start,
+ const const_buffer & b);
 
- class const_buffers_1 :
- public const_buffer
 
+[section:overload1 const_buffer::operator+ (1 of 2 overloads)]
 
-[heading Types]
-[table
- [[Name][Description]]
+Create a new non-modifiable buffer that is offset from the start of another.
 
- [
+ const_buffer operator+(
+ const const_buffer & b,
+ std::size_t start);
 
- [[link boost_asio.reference.const_buffers_1.const_iterator [*const_iterator]]]
- [A random-access iterator type that may be used to read elements. ]
-
- ]
 
- [
 
- [[link boost_asio.reference.const_buffers_1.value_type [*value_type]]]
- [The type for each element in the list of buffers. ]
-
- ]
+[endsect]
+
+
+
+[section:overload2 const_buffer::operator+ (2 of 2 overloads)]
+
+Create a new non-modifiable buffer that is offset from the start of another.
+
+ const_buffer operator+(
+ std::size_t start,
+ const const_buffer & b);
+
+
+
+[endsect]
+
+
+[endsect]
+
+
+[endsect]
+
+[section:const_buffers_1 const_buffers_1]
+
+Adapts a single non-modifiable buffer so that it meets the requirements of the ConstBufferSequence concept.
+
+ class const_buffers_1 :
+ public const_buffer
+
+
+[heading Types]
+[table
+ [[Name][Description]]
+
+ [
+
+ [[link boost_asio.reference.const_buffers_1.const_iterator [*const_iterator]]]
+ [A random-access iterator type that may be used to read elements. ]
+
+ ]
+
+ [
+
+ [[link boost_asio.reference.const_buffers_1.value_type [*value_type]]]
+ [The type for each element in the list of buffers. ]
+
+ ]
 
 ]
 
@@ -21559,6 +22250,27 @@
   
 ]
 
+[heading Related Functions]
+[table
+ [[Name][Description]]
+
+ [
+ [[link boost_asio.reference.const_buffers_1.buffer_cast [*buffer_cast]]]
+ [Cast a non-modifiable buffer to a specified pointer to POD type. ]
+ ]
+
+ [
+ [[link boost_asio.reference.const_buffers_1.buffer_size [*buffer_size]]]
+ [Get the number of bytes in a non-modifiable buffer. ]
+ ]
+
+ [
+ [[link boost_asio.reference.const_buffers_1.operator_plus_ [*operator+]]]
+ [Create a new non-modifiable buffer that is offset from the start of another. ]
+ ]
+
+]
+
 
 [section:begin const_buffers_1::begin]
 
@@ -21572,6 +22284,40 @@
 
 
 
+[section:buffer_cast const_buffers_1::buffer_cast]
+
+
+['Inherited from const_buffer.]
+
+Cast a non-modifiable buffer to a specified pointer to POD type.
+
+ template<
+ typename ``[link boost_asio.reference.PointerToPodType PointerToPodType]``>
+ PointerToPodType buffer_cast(
+ const const_buffer & b);
+
+
+
+[endsect]
+
+
+
+[section:buffer_size const_buffers_1::buffer_size]
+
+
+['Inherited from const_buffer.]
+
+Get the number of bytes in a non-modifiable buffer.
+
+ std::size_t buffer_size(
+ const const_buffer & b);
+
+
+
+[endsect]
+
+
+
 [section:const_buffers_1 const_buffers_1::const_buffers_1]
 
 Construct to represent a single non-modifiable buffer.
@@ -21609,6 +22355,54 @@
 [endsect]
 
 
+[section:operator_plus_ const_buffers_1::operator+]
+
+Create a new non-modifiable buffer that is offset from the start of another.
+
+ const_buffer ``[link boost_asio.reference.const_buffers_1.operator_plus_.overload1 operator+]``(
+ const const_buffer & b,
+ std::size_t start);
+
+ const_buffer ``[link boost_asio.reference.const_buffers_1.operator_plus_.overload2 operator+]``(
+ std::size_t start,
+ const const_buffer & b);
+
+
+[section:overload1 const_buffers_1::operator+ (1 of 2 overloads)]
+
+
+['Inherited from const_buffer.]
+
+Create a new non-modifiable buffer that is offset from the start of another.
+
+ const_buffer operator+(
+ const const_buffer & b,
+ std::size_t start);
+
+
+
+[endsect]
+
+
+
+[section:overload2 const_buffers_1::operator+ (2 of 2 overloads)]
+
+
+['Inherited from const_buffer.]
+
+Create a new non-modifiable buffer that is offset from the start of another.
+
+ const_buffer operator+(
+ std::size_t start,
+ const const_buffer & b);
+
+
+
+[endsect]
+
+
+[endsect]
+
 
 [section:value_type const_buffers_1::value_type]
 
@@ -21628,18 +22422,23 @@
   
 ]
 
-[heading Friends]
+[heading Related Functions]
 [table
   [[Name][Description]]
 
   [
- [[link boost_asio.reference.const_buffer.buffer_cast_helper [*buffer_cast_helper]]]
- []
+ [[link boost_asio.reference.const_buffer.buffer_cast [*buffer_cast]]]
+ [Cast a non-modifiable buffer to a specified pointer to POD type. ]
   ]
   
   [
- [[link boost_asio.reference.const_buffer.buffer_size_helper [*buffer_size_helper]]]
- []
+ [[link boost_asio.reference.const_buffer.buffer_size [*buffer_size]]]
+ [Get the number of bytes in a non-modifiable buffer. ]
+ ]
+
+ [
+ [[link boost_asio.reference.const_buffer.operator_plus_ [*operator+]]]
+ [Create a new non-modifiable buffer that is offset from the start of another. ]
   ]
   
 ]
@@ -22519,6 +23318,22 @@
   
 ]
 
+[heading Protected Data Members]
+[table
+ [[Name][Description]]
+
+ [
+ [[link boost_asio.reference.basic_deadline_timer.implementation [*implementation]]]
+ [The underlying implementation of the I/O object. ]
+ ]
+
+ [
+ [[link boost_asio.reference.basic_deadline_timer.service [*service]]]
+ [The service associated with the I/O object. ]
+ ]
+
+]
+
 The basic_deadline_timer class template provides the ability to perform a blocking or asynchronous wait for a timer to expire.
 
 Most applications will use the boost::asio::deadline\_timer typedef.
@@ -23134,6 +23949,11 @@
   ]
 
   [
+ [name_too_long]
+ [The name was too long. ]
+ ]
+
+ [
     [network_down]
     [Network is down. ]
   ]
@@ -24422,6 +25242,22 @@
   
 ]
 
+[heading Protected Member Functions]
+[table
+ [[Name][Description]]
+
+ [
+ [[link boost_asio.reference.io_service__service.service [*service]]]
+ [Constructor. ]
+ ]
+
+ [
+ [[link boost_asio.reference.io_service__service._service [*~service]]]
+ [Destructor. ]
+ ]
+
+]
+
 
 [section:get_io_service io_service::service::get_io_service]
 
@@ -24447,6 +25283,42 @@
 
 
 
+[section:service io_service::service::service]
+
+Constructor.
+
+ service(
+ boost::asio::io_service & owner);
+
+
+
+[heading Parameters]
+
+
+[variablelist
+
+[[owner][The io\_service object that owns the service. ]]
+
+]
+
+
+
+[endsect]
+
+
+
+[section:_service io_service::service::~service]
+
+Destructor.
+
+ virtual ~service();
+
+
+
+[endsect]
+
+
+
 [endsect]
 
 [section:io_service__strand io_service::strand]
@@ -24915,6 +25787,17 @@
   
 ]
 
+[heading Related Functions]
+[table
+ [[Name][Description]]
+
+ [
+ [[link boost_asio.reference.ip__address.operator_lt__lt_ [*operator<<]]]
+ [Output an address as a string. ]
+ ]
+
+]
+
 The
 [link boost_asio.reference.ip__address ip::address] class provides the ability to use either IP version 4 or version 6 addresses.
 
@@ -25120,6 +26003,42 @@
 [endsect]
 
 
+
+[section:operator_lt__lt_ ip::address::operator<<]
+
+Output an address as a string.
+
+ template<
+ typename ``[link boost_asio.reference.Elem Elem]``,
+ typename ``[link boost_asio.reference.Traits Traits]``>
+ std::basic_ostream< Elem, Traits > & operator<<(
+ std::basic_ostream< Elem, Traits > & os,
+ const address & addr);
+
+
+Used to output a human-readable string for a specified address.
+
+
+[heading Parameters]
+
+
+[variablelist
+
+[[os][The output stream to which the string will be written.]]
+
+[[addr][The address to be written.]]
+
+]
+
+[heading Return Value]
+
+The output stream.
+
+
+
+[endsect]
+
+
 [section:operator_eq_ ip::address::operator=]
 
 Assign from another address.
@@ -25383,6 +26302,17 @@
   
 ]
 
+[heading Related Functions]
+[table
+ [[Name][Description]]
+
+ [
+ [[link boost_asio.reference.ip__address_v4.operator_lt__lt_ [*operator<<]]]
+ [Output an address as a string. ]
+ ]
+
+]
+
 The
 [link boost_asio.reference.ip__address_v4 ip::address_v4] class provides the ability to use and manipulate IP version 4 addresses.
 
@@ -25701,6 +26631,42 @@
 
 
 
+[section:operator_lt__lt_ ip::address_v4::operator<<]
+
+Output an address as a string.
+
+ template<
+ typename ``[link boost_asio.reference.Elem Elem]``,
+ typename ``[link boost_asio.reference.Traits Traits]``>
+ std::basic_ostream< Elem, Traits > & operator<<(
+ std::basic_ostream< Elem, Traits > & os,
+ const address_v4 & addr);
+
+
+Used to output a human-readable string for a specified address.
+
+
+[heading Parameters]
+
+
+[variablelist
+
+[[os][The output stream to which the string will be written.]]
+
+[[addr][The address to be written.]]
+
+]
+
+[heading Return Value]
+
+The output stream.
+
+
+
+[endsect]
+
+
+
 [section:operator_lt__eq_ ip::address_v4::operator<=]
 
 Compare addresses for ordering.
@@ -26009,6 +26975,17 @@
   
 ]
 
+[heading Related Functions]
+[table
+ [[Name][Description]]
+
+ [
+ [[link boost_asio.reference.ip__address_v6.operator_lt__lt_ [*operator<<]]]
+ [Output an address as a string. ]
+ ]
+
+]
+
 The
 [link boost_asio.reference.ip__address_v6 ip::address_v6] class provides the ability to use and manipulate IP version 6 addresses.
 
@@ -26358,6 +27335,42 @@
 
 
 
+[section:operator_lt__lt_ ip::address_v6::operator<<]
+
+Output an address as a string.
+
+ template<
+ typename ``[link boost_asio.reference.Elem Elem]``,
+ typename ``[link boost_asio.reference.Traits Traits]``>
+ std::basic_ostream< Elem, Traits > & operator<<(
+ std::basic_ostream< Elem, Traits > & os,
+ const address_v6 & addr);
+
+
+Used to output a human-readable string for a specified address.
+
+
+[heading Parameters]
+
+
+[variablelist
+
+[[os][The output stream to which the string will be written.]]
+
+[[addr][The address to be written.]]
+
+]
+
+[heading Return Value]
+
+The output stream.
+
+
+
+[endsect]
+
+
+
 [section:operator_lt__eq_ ip::address_v6::operator<=]
 
 Compare addresses for ordering.
@@ -26656,6 +27669,17 @@
   
 ]
 
+[heading Related Functions]
+[table
+ [[Name][Description]]
+
+ [
+ [[link boost_asio.reference.ip__basic_endpoint.operator_lt__lt_ [*operator<<]]]
+ [Output an endpoint as a string. ]
+ ]
+
+]
+
 The
 [link boost_asio.reference.ip__basic_endpoint ip::basic_endpoint] class template describes an endpoint that may be associated with a particular socket.
 
@@ -26880,6 +27904,39 @@
 
 
 
+[section:operator_lt__lt_ ip::basic_endpoint::operator<<]
+
+Output an endpoint as a string.
+
+ std::basic_ostream< Elem, Traits > & operator<<(
+ std::basic_ostream< Elem, Traits > & os,
+ const basic_endpoint< InternetProtocol > & endpoint);
+
+
+Used to output a human-readable string for a specified endpoint.
+
+
+[heading Parameters]
+
+
+[variablelist
+
+[[os][The output stream to which the string will be written.]]
+
+[[endpoint][The endpoint to be written.]]
+
+]
+
+[heading Return Value]
+
+The output stream.
+
+
+
+[endsect]
+
+
+
 [section:operator_eq_ ip::basic_endpoint::operator=]
 
 Assign from another endpoint.
@@ -27090,6 +28147,22 @@
   
 ]
 
+[heading Protected Data Members]
+[table
+ [[Name][Description]]
+
+ [
+ [[link boost_asio.reference.ip__basic_resolver.implementation [*implementation]]]
+ [The underlying implementation of the I/O object. ]
+ ]
+
+ [
+ [[link boost_asio.reference.ip__basic_resolver.service [*service]]]
+ [The service associated with the I/O object. ]
+ ]
+
+]
+
 The basic_resolver class template provides the ability to resolve a query to a list of endpoints.
 
 
@@ -27287,6 +28360,21 @@
 
 
 
+[section:implementation ip::basic_resolver::implementation]
+
+
+['Inherited from basic_io_object.]
+
+The underlying implementation of the I/O object.
+
+ implementation_type implementation;
+
+
+
+[endsect]
+
+
+
 [section:implementation_type ip::basic_resolver::implementation_type]
 
 
@@ -27549,6 +28637,21 @@
 [endsect]
 
 
+[section:service ip::basic_resolver::service]
+
+
+['Inherited from basic_io_object.]
+
+The service associated with the I/O object.
+
+ service_type & service;
+
+
+
+[endsect]
+
+
+
 [section:service_type ip::basic_resolver::service_type]
 
 
@@ -28419,6 +29522,17 @@
   class resolver_query_base
 
 
+[heading Protected Member Functions]
+[table
+ [[Name][Description]]
+
+ [
+ [[link boost_asio.reference.ip__resolver_query_base._resolver_query_base [*~resolver_query_base]]]
+ [Protected destructor to prevent deletion through this type. ]
+ ]
+
+]
+
 [heading Data Members]
 [table
   [[Name][Description]]
@@ -28545,6 +29659,18 @@
 
 
 
+[section:_resolver_query_base ip::resolver_query_base::~resolver_query_base]
+
+Protected destructor to prevent deletion through this type.
+
+ ~resolver_query_base();
+
+
+
+[endsect]
+
+
+
 [endsect]
 
 [section:ip__resolver_service ip::resolver_service]
@@ -29327,6 +30453,22 @@
 
 ]
 
+[heading Protected Data Members]
+[table
+ [[Name][Description]]
+
+ [
+ [[link boost_asio.reference.basic_socket_acceptor.implementation [*implementation]]]
+ [The underlying implementation of the I/O object. ]
+ ]
+
+ [
+ [[link boost_asio.reference.basic_socket_acceptor.service [*service]]]
+ [The service associated with the I/O object. ]
+ ]
+
+]
+
 The basic_socket_acceptor class template is used for accepting new socket connections.
 
 
@@ -29456,6 +30598,17 @@
   
 ]
 
+[heading Related Functions]
+[table
+ [[Name][Description]]
+
+ [
+ [[link boost_asio.reference.ip__basic_endpoint.operator_lt__lt_ [*operator<<]]]
+ [Output an endpoint as a string. ]
+ ]
+
+]
+
 The
 [link boost_asio.reference.ip__basic_endpoint ip::basic_endpoint] class template describes an endpoint that may be associated with a particular socket.
 
@@ -29695,6 +30848,22 @@
   
 ]
 
+[heading Protected Data Members]
+[table
+ [[Name][Description]]
+
+ [
+ [[link boost_asio.reference.ip__basic_resolver.implementation [*implementation]]]
+ [The underlying implementation of the I/O object. ]
+ ]
+
+ [
+ [[link boost_asio.reference.ip__basic_resolver.service [*service]]]
+ [The service associated with the I/O object. ]
+ ]
+
+]
+
 The basic_resolver class template provides the ability to resolve a query to a list of endpoints.
 
 
@@ -30199,6 +31368,22 @@
 
 ]
 
+[heading Protected Data Members]
+[table
+ [[Name][Description]]
+
+ [
+ [[link boost_asio.reference.basic_stream_socket.implementation [*implementation]]]
+ [The underlying implementation of the I/O object. ]
+ ]
+
+ [
+ [[link boost_asio.reference.basic_stream_socket.service [*service]]]
+ [The service associated with the I/O object. ]
+ ]
+
+]
+
 The basic_stream_socket class template provides asynchronous and blocking stream-oriented socket functionality.
 
 
@@ -30459,6 +31644,17 @@
   
 ]
 
+[heading Related Functions]
+[table
+ [[Name][Description]]
+
+ [
+ [[link boost_asio.reference.ip__basic_endpoint.operator_lt__lt_ [*operator<<]]]
+ [Output an endpoint as a string. ]
+ ]
+
+]
+
 The
 [link boost_asio.reference.ip__basic_endpoint ip::basic_endpoint] class template describes an endpoint that may be associated with a particular socket.
 
@@ -30619,6 +31815,22 @@
   
 ]
 
+[heading Protected Data Members]
+[table
+ [[Name][Description]]
+
+ [
+ [[link boost_asio.reference.ip__basic_resolver.implementation [*implementation]]]
+ [The underlying implementation of the I/O object. ]
+ ]
+
+ [
+ [[link boost_asio.reference.ip__basic_resolver.service [*service]]]
+ [The service associated with the I/O object. ]
+ ]
+
+]
+
 The basic_resolver class template provides the ability to resolve a query to a list of endpoints.
 
 
@@ -31123,6 +32335,22 @@
 
 ]
 
+[heading Protected Data Members]
+[table
+ [[Name][Description]]
+
+ [
+ [[link boost_asio.reference.basic_datagram_socket.implementation [*implementation]]]
+ [The underlying implementation of the I/O object. ]
+ ]
+
+ [
+ [[link boost_asio.reference.basic_datagram_socket.service [*service]]]
+ [The service associated with the I/O object. ]
+ ]
+
+]
+
 The basic_datagram_socket class template provides asynchronous and blocking datagram-oriented socket functionality.
 
 
@@ -31327,20 +32555,77 @@
 
 [endsect]
 
-[section:mutable_buffer mutable_buffer]
+[section:local__basic_endpoint local::basic_endpoint]
 
-Holds a buffer that can be modified.
+Describes an endpoint for a UNIX socket.
 
- class mutable_buffer
+ template<
+ typename ``[link boost_asio.reference.Protocol Protocol]``>
+ class basic_endpoint
+
+
+[heading Types]
+[table
+ [[Name][Description]]
+
+ [
+
+ [[link boost_asio.reference.local__basic_endpoint.data_type [*data_type]]]
+ [The type of the endpoint structure. This type is dependent on the underlying implementation of the socket layer. ]
+
+ ]
 
+ [
+
+ [[link boost_asio.reference.local__basic_endpoint.protocol_type [*protocol_type]]]
+ [The protocol type associated with the endpoint. ]
+
+ ]
+
+]
 
 [heading Member Functions]
 [table
   [[Name][Description]]
 
   [
- [[link boost_asio.reference.mutable_buffer.mutable_buffer [*mutable_buffer]]]
- [Construct an empty buffer. ]
+ [[link boost_asio.reference.local__basic_endpoint.basic_endpoint [*basic_endpoint]]]
+ [Default constructor. ]
+ ]
+
+ [
+ [[link boost_asio.reference.local__basic_endpoint.capacity [*capacity]]]
+ [Get the capacity of the endpoint in the native type. ]
+ ]
+
+ [
+ [[link boost_asio.reference.local__basic_endpoint.data [*data]]]
+ [Get the underlying endpoint in the native type. ]
+ ]
+
+ [
+ [[link boost_asio.reference.local__basic_endpoint.operator_eq_ [*operator=]]]
+ [Assign from another endpoint. ]
+ ]
+
+ [
+ [[link boost_asio.reference.local__basic_endpoint.path [*path]]]
+ [Get the path associated with the endpoint. ]
+ ]
+
+ [
+ [[link boost_asio.reference.local__basic_endpoint.protocol [*protocol]]]
+ [The protocol associated with the endpoint. ]
+ ]
+
+ [
+ [[link boost_asio.reference.local__basic_endpoint.resize [*resize]]]
+ [Set the underlying size of the endpoint in the native type. ]
+ ]
+
+ [
+ [[link boost_asio.reference.local__basic_endpoint.size [*size]]]
+ [Get the underlying size of the endpoint in the native type. ]
   ]
   
 ]
@@ -31350,61 +32635,91 @@
   [[Name][Description]]
 
   [
- [[link boost_asio.reference.mutable_buffer.buffer_cast_helper [*buffer_cast_helper]]]
- []
+ [[link boost_asio.reference.local__basic_endpoint.operator_not__eq_ [*operator!=]]]
+ [Compare two endpoints for inequality. ]
   ]
   
   [
- [[link boost_asio.reference.mutable_buffer.buffer_size_helper [*buffer_size_helper]]]
- []
+ [[link boost_asio.reference.local__basic_endpoint.operator_lt_ [*operator<]]]
+ [Compare endpoints for ordering. ]
+ ]
+
+ [
+ [[link boost_asio.reference.local__basic_endpoint.operator_eq__eq_ [*operator==]]]
+ [Compare two endpoints for equality. ]
   ]
   
 ]
 
-The mutable_buffer class provides a safe representation of a buffer that can be modified. It does not own the underlying data, and so is cheap to copy or assign.
+[heading Related Functions]
+[table
+ [[Name][Description]]
 
+ [
+ [[link boost_asio.reference.local__basic_endpoint.operator_lt__lt_ [*operator<<]]]
+ [Output an endpoint as a string. ]
+ ]
+
+]
 
-[section:buffer_cast_helper mutable_buffer::buffer_cast_helper]
+The
+[link boost_asio.reference.local__basic_endpoint local::basic_endpoint] class template describes an endpoint that may be associated with a particular UNIX socket.
 
 
+[heading Thread Safety]
+
+[*Distinct] [*objects:] Safe.
 
- friend void * buffer_cast_helper(
- const mutable_buffer & b);
+[*Shared] [*objects:] Unsafe.
 
 
+[section:basic_endpoint local::basic_endpoint::basic_endpoint]
 
-[endsect]
+Default constructor.
 
+ ``[link boost_asio.reference.local__basic_endpoint.basic_endpoint.overload1 basic_endpoint]``();
 
+ ``[link boost_asio.reference.local__basic_endpoint.basic_endpoint.overload2 basic_endpoint]``(
+ const char * path);
 
-[section:buffer_size_helper mutable_buffer::buffer_size_helper]
+ ``[link boost_asio.reference.local__basic_endpoint.basic_endpoint.overload3 basic_endpoint]``(
+ const std::string & path);
 
+ ``[link boost_asio.reference.local__basic_endpoint.basic_endpoint.overload4 basic_endpoint]``(
+ const basic_endpoint & other);
 
 
- friend std::size_t buffer_size_helper(
- const mutable_buffer & b);
+[section:overload1 local::basic_endpoint::basic_endpoint (1 of 4 overloads)]
+
+Default constructor.
+
+ basic_endpoint();
 
 
 
 [endsect]
 
 
-[section:mutable_buffer mutable_buffer::mutable_buffer]
 
-Construct an empty buffer.
+[section:overload2 local::basic_endpoint::basic_endpoint (2 of 4 overloads)]
 
- ``[link boost_asio.reference.mutable_buffer.mutable_buffer.overload1 mutable_buffer]``();
+Construct an endpoint using the specified path name.
 
- ``[link boost_asio.reference.mutable_buffer.mutable_buffer.overload2 mutable_buffer]``(
- void * data,
- std::size_t size);
+ basic_endpoint(
+ const char * path);
 
 
-[section:overload1 mutable_buffer::mutable_buffer (1 of 2 overloads)]
 
-Construct an empty buffer.
+[endsect]
 
- mutable_buffer();
+
+
+[section:overload3 local::basic_endpoint::basic_endpoint (3 of 4 overloads)]
+
+Construct an endpoint using the specified path name.
+
+ basic_endpoint(
+ const std::string & path);
 
 
 
@@ -31412,13 +32727,12 @@
 
 
 
-[section:overload2 mutable_buffer::mutable_buffer (2 of 2 overloads)]
+[section:overload4 local::basic_endpoint::basic_endpoint (4 of 4 overloads)]
 
-Construct a buffer to represent a given memory range.
+Copy constructor.
 
- mutable_buffer(
- void * data,
- std::size_t size);
+ basic_endpoint(
+ const basic_endpoint & other);
 
 
 
@@ -31428,75 +32742,57 @@
 [endsect]
 
 
+[section:capacity local::basic_endpoint::capacity]
+
+Get the capacity of the endpoint in the native type.
+
+ std::size_t capacity() const;
+
+
+
 [endsect]
 
-[section:mutable_buffers_1 mutable_buffers_1]
 
-Adapts a single modifiable buffer so that it meets the requirements of the MutableBufferSequence concept.
+[section:data local::basic_endpoint::data]
 
- class mutable_buffers_1 :
- public mutable_buffer
+Get the underlying endpoint in the native type.
 
+ data_type * ``[link boost_asio.reference.local__basic_endpoint.data.overload1 data]``();
 
-[heading Types]
-[table
- [[Name][Description]]
+ const data_type * ``[link boost_asio.reference.local__basic_endpoint.data.overload2 data]``() const;
 
- [
 
- [[link boost_asio.reference.mutable_buffers_1.const_iterator [*const_iterator]]]
- [A random-access iterator type that may be used to read elements. ]
-
- ]
+[section:overload1 local::basic_endpoint::data (1 of 2 overloads)]
 
- [
+Get the underlying endpoint in the native type.
 
- [[link boost_asio.reference.mutable_buffers_1.value_type [*value_type]]]
- [The type for each element in the list of buffers. ]
-
- ]
+ data_type * data();
 
-]
 
-[heading Member Functions]
-[table
- [[Name][Description]]
 
- [
- [[link boost_asio.reference.mutable_buffers_1.begin [*begin]]]
- [Get a random-access iterator to the first element. ]
- ]
-
- [
- [[link boost_asio.reference.mutable_buffers_1.end [*end]]]
- [Get a random-access iterator for one past the last element. ]
- ]
-
- [
- [[link boost_asio.reference.mutable_buffers_1.mutable_buffers_1 [*mutable_buffers_1]]]
- [Construct to represent a single modifiable buffer. ]
- ]
-
-]
+[endsect]
 
 
-[section:begin mutable_buffers_1::begin]
 
-Get a random-access iterator to the first element.
+[section:overload2 local::basic_endpoint::data (2 of 2 overloads)]
 
- const_iterator begin() const;
+Get the underlying endpoint in the native type.
+
+ const data_type * data() const;
 
 
 
 [endsect]
 
 
+[endsect]
 
-[section:const_iterator mutable_buffers_1::const_iterator]
 
-A random-access iterator type that may be used to read elements.
+[section:data_type local::basic_endpoint::data_type]
 
- typedef const mutable_buffer * const_iterator;
+The type of the endpoint structure. This type is dependent on the underlying implementation of the socket layer.
+
+ typedef implementation_defined data_type;
 
 
 
@@ -31505,11 +32801,13 @@
 
 
 
-[section:end mutable_buffers_1::end]
+[section:operator_not__eq_ local::basic_endpoint::operator!=]
 
-Get a random-access iterator for one past the last element.
+Compare two endpoints for inequality.
 
- const_iterator end() const;
+ friend bool operator!=(
+ const basic_endpoint< Protocol > & e1,
+ const basic_endpoint< Protocol > & e2);
 
 
 
@@ -31517,12 +32815,13 @@
 
 
 
-[section:mutable_buffers_1 mutable_buffers_1::mutable_buffers_1]
+[section:operator_lt_ local::basic_endpoint::operator<]
 
-Construct to represent a single modifiable buffer.
+Compare endpoints for ordering.
 
- mutable_buffers_1(
- const mutable_buffer & b);
+ friend bool operator<(
+ const basic_endpoint< Protocol > & e1,
+ const basic_endpoint< Protocol > & e2);
 
 
 
@@ -31530,56 +32829,45 @@
 
 
 
-[section:value_type mutable_buffers_1::value_type]
+[section:operator_lt__lt_ local::basic_endpoint::operator<<]
 
-The type for each element in the list of buffers.
+Output an endpoint as a string.
 
- typedef mutable_buffer value_type;
+ std::basic_ostream< Elem, Traits > & operator<<(
+ std::basic_ostream< Elem, Traits > & os,
+ const basic_endpoint< Protocol > & endpoint);
 
 
-[heading Member Functions]
-[table
- [[Name][Description]]
+Used to output a human-readable string for a specified endpoint.
 
- [
- [[link boost_asio.reference.mutable_buffer.mutable_buffer [*mutable_buffer]]]
- [Construct an empty buffer. ]
- ]
-
-]
 
-[heading Friends]
-[table
- [[Name][Description]]
+[heading Parameters]
+
 
- [
- [[link boost_asio.reference.mutable_buffer.buffer_cast_helper [*buffer_cast_helper]]]
- []
- ]
-
- [
- [[link boost_asio.reference.mutable_buffer.buffer_size_helper [*buffer_size_helper]]]
- []
- ]
+[variablelist
   
-]
-
-The mutable_buffer class provides a safe representation of a buffer that can be modified. It does not own the underlying data, and so is cheap to copy or assign.
+[[os][The output stream to which the string will be written.]]
 
+[[endpoint][The endpoint to be written.]]
 
+]
 
-[endsect]
+[heading Return Value]
+
+The output stream.
 
 
 
 [endsect]
 
 
-[section:placeholders__bytes_transferred placeholders::bytes_transferred]
 
-An argument placeholder, for use with boost::bind(), that corresponds to the bytes_transferred argument of a handler for asynchronous functions such as boost::asio::basic_stream_socket::async_write_some or boost::asio::async_write.
+[section:operator_eq_ local::basic_endpoint::operator=]
 
- unspecified bytes_transferred;
+Assign from another endpoint.
+
+ basic_endpoint & operator=(
+ const basic_endpoint & other);
 
 
 
@@ -31587,152 +32875,89 @@
 
 
 
-[section:placeholders__error placeholders::error]
+[section:operator_eq__eq_ local::basic_endpoint::operator==]
 
-An argument placeholder, for use with boost::bind(), that corresponds to the error argument of a handler for any of the asynchronous functions.
+Compare two endpoints for equality.
 
- unspecified error;
+ friend bool operator==(
+ const basic_endpoint< Protocol > & e1,
+ const basic_endpoint< Protocol > & e2);
 
 
 
 [endsect]
 
 
+[section:path local::basic_endpoint::path]
 
-[section:placeholders__iterator placeholders::iterator]
-
-An argument placeholder, for use with boost::bind(), that corresponds to the iterator argument of a handler for asynchronous functions such as boost::asio::basic_resolver::resolve.
+Get the path associated with the endpoint.
 
- unspecified iterator;
+ std::string ``[link boost_asio.reference.local__basic_endpoint.path.overload1 path]``() const;
 
+ void ``[link boost_asio.reference.local__basic_endpoint.path.overload2 path]``(
+ const char * p);
 
+ void ``[link boost_asio.reference.local__basic_endpoint.path.overload3 path]``(
+ const std::string & p);
 
-[endsect]
 
+[section:overload1 local::basic_endpoint::path (1 of 3 overloads)]
 
-[section:read read]
+Get the path associated with the endpoint.
 
-Attempt to read a certain amount of data from a stream before returning.
+ std::string path() const;
 
- template<
- typename ``[link boost_asio.reference.SyncReadStream SyncReadStream]``,
- typename ``[link boost_asio.reference.MutableBufferSequence MutableBufferSequence]``>
- std::size_t ``[link boost_asio.reference.read.overload1 read]``(
- SyncReadStream & s,
- const MutableBufferSequence & buffers);
 
- template<
- typename ``[link boost_asio.reference.SyncReadStream SyncReadStream]``,
- typename ``[link boost_asio.reference.MutableBufferSequence MutableBufferSequence]``,
- typename CompletionCondition>
- std::size_t ``[link boost_asio.reference.read.overload2 read]``(
- SyncReadStream & s,
- const MutableBufferSequence & buffers,
- CompletionCondition completion_condition);
 
- template<
- typename ``[link boost_asio.reference.SyncReadStream SyncReadStream]``,
- typename ``[link boost_asio.reference.MutableBufferSequence MutableBufferSequence]``,
- typename CompletionCondition>
- std::size_t ``[link boost_asio.reference.read.overload3 read]``(
- SyncReadStream & s,
- const MutableBufferSequence & buffers,
- CompletionCondition completion_condition,
- boost::system::error_code & ec);
+[endsect]
 
- template<
- typename ``[link boost_asio.reference.SyncReadStream SyncReadStream]``,
- typename Allocator>
- std::size_t ``[link boost_asio.reference.read.overload4 read]``(
- SyncReadStream & s,
- basic_streambuf< Allocator > & b);
 
- template<
- typename ``[link boost_asio.reference.SyncReadStream SyncReadStream]``,
- typename Allocator,
- typename CompletionCondition>
- std::size_t ``[link boost_asio.reference.read.overload5 read]``(
- SyncReadStream & s,
- basic_streambuf< Allocator > & b,
- CompletionCondition completion_condition);
 
- template<
- typename ``[link boost_asio.reference.SyncReadStream SyncReadStream]``,
- typename Allocator,
- typename CompletionCondition>
- std::size_t ``[link boost_asio.reference.read.overload6 read]``(
- SyncReadStream & s,
- basic_streambuf< Allocator > & b,
- CompletionCondition completion_condition,
- boost::system::error_code & ec);
+[section:overload2 local::basic_endpoint::path (2 of 3 overloads)]
 
+Set the path associated with the endpoint.
 
-[section:overload1 read (1 of 6 overloads)]
+ void path(
+ const char * p);
 
-Attempt to read a certain amount of data from a stream before returning.
 
- template<
- typename ``[link boost_asio.reference.SyncReadStream SyncReadStream]``,
- typename ``[link boost_asio.reference.MutableBufferSequence MutableBufferSequence]``>
- std::size_t read(
- SyncReadStream & s,
- const MutableBufferSequence & buffers);
 
+[endsect]
 
-This function is used to read a certain number of bytes of data from a stream. The call will block until one of the following conditions is true:
 
 
-* The supplied buffers are full. That is, the bytes transferred is equal to the sum of the buffer sizes.
+[section:overload3 local::basic_endpoint::path (3 of 3 overloads)]
 
-* An error occurred.
+Set the path associated with the endpoint.
 
-This operation is implemented in terms of one or more calls to the stream's read\_some function.
+ void path(
+ const std::string & p);
 
 
-[heading Parameters]
-
 
-[variablelist
-
-[[s][The stream from which the data is to be read. The type must support the SyncReadStream concept.]]
+[endsect]
 
-[[buffers][One or more buffers into which the data will be read. The sum of the buffer sizes indicates the maximum number of bytes to read from the stream.]]
 
-]
+[endsect]
 
-[heading Return Value]
-
-The number of bytes transferred.
 
-[heading Exceptions]
-
+[section:protocol local::basic_endpoint::protocol]
 
-[variablelist
-
-[[boost::system::system_error][Thrown on failure.]]
+The protocol associated with the endpoint.
 
-]
+ protocol_type protocol() const;
 
-[heading Example]
-
-To read into a single data buffer use the
-[link boost_asio.reference.buffer buffer] function as follows:
 
- boost::asio::read(s, boost::asio::buffer(data, size));
 
+[endsect]
 
-See the
-[link boost_asio.reference.buffer buffer] documentation for information on reading into multiple buffers in one go, and how to use it with arrays, boost::array or std::vector.
 
-[heading Remarks]
-
-This overload is equivalent to calling:
 
- boost::asio::read(
- s, buffers,
- boost::asio::transfer_all());
+[section:protocol_type local::basic_endpoint::protocol_type]
 
+The protocol type associated with the endpoint.
 
+ typedef Protocol protocol_type;
 
 
 
@@ -31741,78 +32966,66 @@
 
 
 
-[section:overload2 read (2 of 6 overloads)]
+[section:resize local::basic_endpoint::resize]
 
-Attempt to read a certain amount of data from a stream before returning.
+Set the underlying size of the endpoint in the native type.
 
- template<
- typename ``[link boost_asio.reference.SyncReadStream SyncReadStream]``,
- typename ``[link boost_asio.reference.MutableBufferSequence MutableBufferSequence]``,
- typename CompletionCondition>
- std::size_t read(
- SyncReadStream & s,
- const MutableBufferSequence & buffers,
- CompletionCondition completion_condition);
+ void resize(
+ std::size_t size);
 
 
-This function is used to read a certain number of bytes of data from a stream. The call will block until one of the following conditions is true:
 
+[endsect]
 
-* The supplied buffers are full. That is, the bytes transferred is equal to the sum of the buffer sizes.
 
-* The completion_condition function object returns true.
 
-This operation is implemented in terms of one or more calls to the stream's read\_some function.
+[section:size local::basic_endpoint::size]
 
+Get the underlying size of the endpoint in the native type.
 
-[heading Parameters]
-
+ std::size_t size() const;
 
-[variablelist
-
-[[s][The stream from which the data is to be read. The type must support the SyncReadStream concept.]]
 
-[[buffers][One or more buffers into which the data will be read. The sum of the buffer sizes indicates the maximum number of bytes to read from the stream.]]
 
-[[completion_condition][The function object to be called to determine whether the read operation is complete. The signature of the function object must be:
-``
- bool completion_condition(
- const boost::system::error_code& error, // Result of latest read_some
- // operation.
+[endsect]
 
- std::size_t bytes_transferred // Number of bytes transferred
- // so far.
- );
 
-``
-A return value of true indicates that the read operation is complete. False indicates that further calls to the stream's read\_some function are required.]]
 
-]
+[endsect]
 
-[heading Return Value]
-
-The number of bytes transferred.
+[section:local__connect_pair local::connect_pair]
 
-[heading Exceptions]
-
+Create a pair of connected sockets.
 
-[variablelist
-
-[[boost::system::system_error][Thrown on failure.]]
+ template<
+ typename ``[link boost_asio.reference.Protocol Protocol]``,
+ typename ``[link boost_asio.reference.SocketService1 SocketService1]``,
+ typename ``[link boost_asio.reference.SocketService2 SocketService2]``>
+ void ``[link boost_asio.reference.local__connect_pair.overload1 connect_pair]``(
+ basic_socket< Protocol, SocketService1 > & socket1,
+ basic_socket< Protocol, SocketService2 > & socket2);
 
-]
+ template<
+ typename ``[link boost_asio.reference.Protocol Protocol]``,
+ typename ``[link boost_asio.reference.SocketService1 SocketService1]``,
+ typename ``[link boost_asio.reference.SocketService2 SocketService2]``>
+ boost::system::error_code ``[link boost_asio.reference.local__connect_pair.overload2 connect_pair]``(
+ basic_socket< Protocol, SocketService1 > & socket1,
+ basic_socket< Protocol, SocketService2 > & socket2,
+ boost::system::error_code & ec);
 
-[heading Example]
-
-To read into a single data buffer use the
-[link boost_asio.reference.buffer buffer] function as follows:
 
- boost::asio::read(s, boost::asio::buffer(data, size),
- boost::asio::transfer_at_least(32));
+[section:overload1 local::connect_pair (1 of 2 overloads)]
 
+Create a pair of connected sockets.
 
-See the
-[link boost_asio.reference.buffer buffer] documentation for information on reading into multiple buffers in one go, and how to use it with arrays, boost::array or std::vector.
+ template<
+ typename ``[link boost_asio.reference.Protocol Protocol]``,
+ typename ``[link boost_asio.reference.SocketService1 SocketService1]``,
+ typename ``[link boost_asio.reference.SocketService2 SocketService2]``>
+ void connect_pair(
+ basic_socket< Protocol, SocketService1 > & socket1,
+ basic_socket< Protocol, SocketService2 > & socket2);
 
 
 
@@ -31820,120 +33033,200 @@
 
 
 
-[section:overload3 read (3 of 6 overloads)]
+[section:overload2 local::connect_pair (2 of 2 overloads)]
 
-Attempt to read a certain amount of data from a stream before returning.
+Create a pair of connected sockets.
 
   template<
- typename ``[link boost_asio.reference.SyncReadStream SyncReadStream]``,
- typename ``[link boost_asio.reference.MutableBufferSequence MutableBufferSequence]``,
- typename CompletionCondition>
- std::size_t read(
- SyncReadStream & s,
- const MutableBufferSequence & buffers,
- CompletionCondition completion_condition,
+ typename ``[link boost_asio.reference.Protocol Protocol]``,
+ typename ``[link boost_asio.reference.SocketService1 SocketService1]``,
+ typename ``[link boost_asio.reference.SocketService2 SocketService2]``>
+ boost::system::error_code connect_pair(
+ basic_socket< Protocol, SocketService1 > & socket1,
+ basic_socket< Protocol, SocketService2 > & socket2,
       boost::system::error_code & ec);
 
 
-This function is used to read a certain number of bytes of data from a stream. The call will block until one of the following conditions is true:
 
+[endsect]
 
-* The supplied buffers are full. That is, the bytes transferred is equal to the sum of the buffer sizes.
 
-* The completion_condition function object returns true.
+[endsect]
 
-This operation is implemented in terms of one or more calls to the stream's read\_some function.
+[section:local__datagram_protocol local::datagram_protocol]
 
+Encapsulates the flags needed for datagram-oriented UNIX sockets.
 
-[heading Parameters]
-
+ class datagram_protocol
 
-[variablelist
-
-[[s][The stream from which the data is to be read. The type must support the SyncReadStream concept.]]
 
-[[buffers][One or more buffers into which the data will be read. The sum of the buffer sizes indicates the maximum number of bytes to read from the stream.]]
+[heading Types]
+[table
+ [[Name][Description]]
 
-[[completion_condition][The function object to be called to determine whether the read operation is complete. The signature of the function object must be:
-``
- bool completion_condition(
- const boost::system::error_code& error, // Result of latest read_some
- // operation.
+ [
 
- std::size_t bytes_transferred // Number of bytes transferred
- // so far.
- );
+ [[link boost_asio.reference.local__datagram_protocol.endpoint [*endpoint]]]
+ [The type of a UNIX domain endpoint. ]
+
+ ]
 
-``
-A return value of true indicates that the read operation is complete. False indicates that further calls to the stream's read\_some function are required.]]
+ [
 
-[[ec][Set to indicate what error occurred, if any.]]
+ [[link boost_asio.reference.local__datagram_protocol.socket [*socket]]]
+ [The UNIX domain socket type. ]
+
+ ]
 
 ]
 
-[heading Return Value]
-
-The number of bytes read. If an error occurs, returns the total number of bytes successfully transferred prior to the error.
+[heading Member Functions]
+[table
+ [[Name][Description]]
 
+ [
+ [[link boost_asio.reference.local__datagram_protocol.family [*family]]]
+ [Obtain an identifier for the protocol family. ]
+ ]
+
+ [
+ [[link boost_asio.reference.local__datagram_protocol.protocol [*protocol]]]
+ [Obtain an identifier for the protocol. ]
+ ]
+
+ [
+ [[link boost_asio.reference.local__datagram_protocol.type [*type]]]
+ [Obtain an identifier for the type of the protocol. ]
+ ]
+
+]
 
+The
+[link boost_asio.reference.local__datagram_protocol local::datagram_protocol] class contains flags necessary for datagram-oriented UNIX domain sockets.
 
-[endsect]
 
+[heading Thread Safety]
+
+[*Distinct] [*objects:] Safe.
 
+[*Shared] [*objects:] Safe.
 
-[section:overload4 read (4 of 6 overloads)]
 
-Attempt to read a certain amount of data from a stream before returning.
 
- template<
- typename ``[link boost_asio.reference.SyncReadStream SyncReadStream]``,
- typename Allocator>
- std::size_t read(
- SyncReadStream & s,
- basic_streambuf< Allocator > & b);
+[section:endpoint local::datagram_protocol::endpoint]
 
+The type of a UNIX domain endpoint.
 
-This function is used to read a certain number of bytes of data from a stream. The call will block until one of the following conditions is true:
+ typedef basic_endpoint< datagram_protocol > endpoint;
 
 
-* An error occurred.
+[heading Types]
+[table
+ [[Name][Description]]
 
-This operation is implemented in terms of one or more calls to the stream's read\_some function.
+ [
 
+ [[link boost_asio.reference.local__basic_endpoint.data_type [*data_type]]]
+ [The type of the endpoint structure. This type is dependent on the underlying implementation of the socket layer. ]
+
+ ]
 
-[heading Parameters]
-
+ [
 
-[variablelist
+ [[link boost_asio.reference.local__basic_endpoint.protocol_type [*protocol_type]]]
+ [The protocol type associated with the endpoint. ]
   
-[[s][The stream from which the data is to be read. The type must support the SyncReadStream concept.]]
-
-[[b][The basic\_streambuf object into which the data will be read.]]
+ ]
 
 ]
 
-[heading Return Value]
-
-The number of bytes transferred.
+[heading Member Functions]
+[table
+ [[Name][Description]]
 
-[heading Exceptions]
-
+ [
+ [[link boost_asio.reference.local__basic_endpoint.basic_endpoint [*basic_endpoint]]]
+ [Default constructor. ]
+ ]
+
+ [
+ [[link boost_asio.reference.local__basic_endpoint.capacity [*capacity]]]
+ [Get the capacity of the endpoint in the native type. ]
+ ]
+
+ [
+ [[link boost_asio.reference.local__basic_endpoint.data [*data]]]
+ [Get the underlying endpoint in the native type. ]
+ ]
+
+ [
+ [[link boost_asio.reference.local__basic_endpoint.operator_eq_ [*operator=]]]
+ [Assign from another endpoint. ]
+ ]
+
+ [
+ [[link boost_asio.reference.local__basic_endpoint.path [*path]]]
+ [Get the path associated with the endpoint. ]
+ ]
+
+ [
+ [[link boost_asio.reference.local__basic_endpoint.protocol [*protocol]]]
+ [The protocol associated with the endpoint. ]
+ ]
+
+ [
+ [[link boost_asio.reference.local__basic_endpoint.resize [*resize]]]
+ [Set the underlying size of the endpoint in the native type. ]
+ ]
+
+ [
+ [[link boost_asio.reference.local__basic_endpoint.size [*size]]]
+ [Get the underlying size of the endpoint in the native type. ]
+ ]
+
+]
 
-[variablelist
+[heading Friends]
+[table
+ [[Name][Description]]
+
+ [
+ [[link boost_asio.reference.local__basic_endpoint.operator_not__eq_ [*operator!=]]]
+ [Compare two endpoints for inequality. ]
+ ]
   
-[[boost::system::system_error][Thrown on failure.]]
+ [
+ [[link boost_asio.reference.local__basic_endpoint.operator_lt_ [*operator<]]]
+ [Compare endpoints for ordering. ]
+ ]
+
+ [
+ [[link boost_asio.reference.local__basic_endpoint.operator_eq__eq_ [*operator==]]]
+ [Compare two endpoints for equality. ]
+ ]
+
+]
+
+[heading Related Functions]
+[table
+ [[Name][Description]]
 
+ [
+ [[link boost_asio.reference.local__basic_endpoint.operator_lt__lt_ [*operator<<]]]
+ [Output an endpoint as a string. ]
+ ]
+
 ]
 
-[heading Remarks]
-
-This overload is equivalent to calling:
+The
+[link boost_asio.reference.local__basic_endpoint local::basic_endpoint] class template describes an endpoint that may be associated with a particular UNIX socket.
 
- boost::asio::read(
- s, b,
- boost::asio::transfer_all());
 
+[heading Thread Safety]
+
+[*Distinct] [*objects:] Safe.
 
+[*Shared] [*objects:] Unsafe.
 
 
 
@@ -31942,297 +33235,6732 @@
 
 
 
-[section:overload5 read (5 of 6 overloads)]
+[section:family local::datagram_protocol::family]
 
-Attempt to read a certain amount of data from a stream before returning.
+Obtain an identifier for the protocol family.
 
- template<
- typename ``[link boost_asio.reference.SyncReadStream SyncReadStream]``,
- typename Allocator,
- typename CompletionCondition>
- std::size_t read(
- SyncReadStream & s,
- basic_streambuf< Allocator > & b,
- CompletionCondition completion_condition);
+ int family() const;
 
 
-This function is used to read a certain number of bytes of data from a stream. The call will block until one of the following conditions is true:
 
+[endsect]
 
-* The completion_condition function object returns true.
 
-This operation is implemented in terms of one or more calls to the stream's read\_some function.
 
+[section:protocol local::datagram_protocol::protocol]
 
-[heading Parameters]
-
+Obtain an identifier for the protocol.
 
-[variablelist
-
-[[s][The stream from which the data is to be read. The type must support the SyncReadStream concept.]]
+ int protocol() const;
 
-[[b][The basic\_streambuf object into which the data will be read.]]
 
-[[completion_condition][The function object to be called to determine whether the read operation is complete. The signature of the function object must be:
-``
- bool completion_condition(
- const boost::system::error_code& error, // Result of latest read_some
- // operation.
 
- std::size_t bytes_transferred // Number of bytes transferred
- // so far.
- );
+[endsect]
 
-``
-A return value of true indicates that the read operation is complete. False indicates that further calls to the stream's read\_some function are required.]]
+
+
+[section:socket local::datagram_protocol::socket]
+
+The UNIX domain socket type.
+
+ typedef basic_datagram_socket< datagram_protocol > socket;
+
+
+[heading Types]
+[table
+ [[Name][Description]]
+
+ [
+
+ [[link boost_asio.reference.basic_datagram_socket.broadcast [*broadcast]]]
+ [Socket option to permit sending of broadcast messages. ]
+
+ ]
+
+ [
+
+ [[link boost_asio.reference.basic_datagram_socket.bytes_readable [*bytes_readable]]]
+ [IO control command to get the amount of data that can be read without blocking. ]
+
+ ]
+
+ [
+
+ [[link boost_asio.reference.basic_datagram_socket.debug [*debug]]]
+ [Socket option to enable socket-level debugging. ]
+
+ ]
+
+ [
+
+ [[link boost_asio.reference.basic_datagram_socket.do_not_route [*do_not_route]]]
+ [Socket option to prevent routing, use local interfaces only. ]
+
+ ]
+
+ [
+
+ [[link boost_asio.reference.basic_datagram_socket.enable_connection_aborted [*enable_connection_aborted]]]
+ [Socket option to report aborted connections on accept. ]
+
+ ]
+
+ [
+
+ [[link boost_asio.reference.basic_datagram_socket.endpoint_type [*endpoint_type]]]
+ [The endpoint type. ]
+
+ ]
+
+ [
+
+ [[link boost_asio.reference.basic_datagram_socket.implementation_type [*implementation_type]]]
+ [The underlying implementation type of I/O object. ]
+
+ ]
+
+ [
+
+ [[link boost_asio.reference.basic_datagram_socket.keep_alive [*keep_alive]]]
+ [Socket option to send keep-alives. ]
+
+ ]
+
+ [
+
+ [[link boost_asio.reference.basic_datagram_socket.linger [*linger]]]
+ [Socket option to specify whether the socket lingers on close if unsent data is present. ]
+
+ ]
+
+ [
+
+ [[link boost_asio.reference.basic_datagram_socket.lowest_layer_type [*lowest_layer_type]]]
+ [A basic_socket is always the lowest layer. ]
+
+ ]
+
+ [
+
+ [[link boost_asio.reference.basic_datagram_socket.message_flags [*message_flags]]]
+ [Bitmask type for flags that can be passed to send and receive operations. ]
+
+ ]
+
+ [
+
+ [[link boost_asio.reference.basic_datagram_socket.native_type [*native_type]]]
+ [The native representation of a socket. ]
+
+ ]
+
+ [
+
+ [[link boost_asio.reference.basic_datagram_socket.non_blocking_io [*non_blocking_io]]]
+ [IO control command to set the blocking mode of the socket. ]
+
+ ]
+
+ [
+
+ [[link boost_asio.reference.basic_datagram_socket.protocol_type [*protocol_type]]]
+ [The protocol type. ]
+
+ ]
+
+ [
+
+ [[link boost_asio.reference.basic_datagram_socket.receive_buffer_size [*receive_buffer_size]]]
+ [Socket option for the receive buffer size of a socket. ]
+
+ ]
+
+ [
+
+ [[link boost_asio.reference.basic_datagram_socket.receive_low_watermark [*receive_low_watermark]]]
+ [Socket option for the receive low watermark. ]
+
+ ]
+
+ [
+
+ [[link boost_asio.reference.basic_datagram_socket.reuse_address [*reuse_address]]]
+ [Socket option to allow the socket to be bound to an address that is already in use. ]
+
+ ]
+
+ [
+
+ [[link boost_asio.reference.basic_datagram_socket.send_buffer_size [*send_buffer_size]]]
+ [Socket option for the send buffer size of a socket. ]
+
+ ]
+
+ [
+
+ [[link boost_asio.reference.basic_datagram_socket.send_low_watermark [*send_low_watermark]]]
+ [Socket option for the send low watermark. ]
+
+ ]
+
+ [
+
+ [[link boost_asio.reference.basic_datagram_socket.service_type [*service_type]]]
+ [The type of the service that will be used to provide I/O operations. ]
+
+ ]
+
+ [
+
+ [[link boost_asio.reference.basic_datagram_socket.shutdown_type [*shutdown_type]]]
+ [Different ways a socket may be shutdown. ]
+
+ ]
 
 ]
 
-[heading Return Value]
-
-The number of bytes transferred.
+[heading Member Functions]
+[table
+ [[Name][Description]]
 
-[heading Exceptions]
-
+ [
+ [[link boost_asio.reference.basic_datagram_socket.assign [*assign]]]
+ [Assign an existing native socket to the socket. ]
+ ]
+
+ [
+ [[link boost_asio.reference.basic_datagram_socket.async_connect [*async_connect]]]
+ [Start an asynchronous connect. ]
+ ]
+
+ [
+ [[link boost_asio.reference.basic_datagram_socket.async_receive [*async_receive]]]
+ [Start an asynchronous receive on a connected socket. ]
+ ]
+
+ [
+ [[link boost_asio.reference.basic_datagram_socket.async_receive_from [*async_receive_from]]]
+ [Start an asynchronous receive. ]
+ ]
+
+ [
+ [[link boost_asio.reference.basic_datagram_socket.async_send [*async_send]]]
+ [Start an asynchronous send on a connected socket. ]
+ ]
+
+ [
+ [[link boost_asio.reference.basic_datagram_socket.async_send_to [*async_send_to]]]
+ [Start an asynchronous send. ]
+ ]
+
+ [
+ [[link boost_asio.reference.basic_datagram_socket.at_mark [*at_mark]]]
+ [Determine whether the socket is at the out-of-band data mark. ]
+ ]
+
+ [
+ [[link boost_asio.reference.basic_datagram_socket.available [*available]]]
+ [Determine the number of bytes available for reading. ]
+ ]
+
+ [
+ [[link boost_asio.reference.basic_datagram_socket.basic_datagram_socket [*basic_datagram_socket]]]
+ [Construct a basic_datagram_socket without opening it. ]
+ ]
+
+ [
+ [[link boost_asio.reference.basic_datagram_socket.bind [*bind]]]
+ [Bind the socket to the given local endpoint. ]
+ ]
+
+ [
+ [[link boost_asio.reference.basic_datagram_socket.cancel [*cancel]]]
+ [Cancel all asynchronous operations associated with the socket. ]
+ ]
+
+ [
+ [[link boost_asio.reference.basic_datagram_socket.close [*close]]]
+ [Close the socket. ]
+ ]
+
+ [
+ [[link boost_asio.reference.basic_datagram_socket.connect [*connect]]]
+ [Connect the socket to the specified endpoint. ]
+ ]
+
+ [
+ [[link boost_asio.reference.basic_datagram_socket.get_io_service [*get_io_service]]]
+ [Get the io_service associated with the object. ]
+ ]
+
+ [
+ [[link boost_asio.reference.basic_datagram_socket.get_option [*get_option]]]
+ [Get an option from the socket. ]
+ ]
+
+ [
+ [[link boost_asio.reference.basic_datagram_socket.io_control [*io_control]]]
+ [Perform an IO control command on the socket. ]
+ ]
+
+ [
+ [[link boost_asio.reference.basic_datagram_socket.io_service [*io_service]]]
+ [(Deprecated: use get_io_service().) Get the io_service associated with the object. ]
+ ]
+
+ [
+ [[link boost_asio.reference.basic_datagram_socket.is_open [*is_open]]]
+ [Determine whether the socket is open. ]
+ ]
+
+ [
+ [[link boost_asio.reference.basic_datagram_socket.local_endpoint [*local_endpoint]]]
+ [Get the local endpoint of the socket. ]
+ ]
+
+ [
+ [[link boost_asio.reference.basic_datagram_socket.lowest_layer [*lowest_layer]]]
+ [Get a reference to the lowest layer. ]
+ ]
+
+ [
+ [[link boost_asio.reference.basic_datagram_socket.native [*native]]]
+ [Get the native socket representation. ]
+ ]
+
+ [
+ [[link boost_asio.reference.basic_datagram_socket.open [*open]]]
+ [Open the socket using the specified protocol. ]
+ ]
+
+ [
+ [[link boost_asio.reference.basic_datagram_socket.receive [*receive]]]
+ [Receive some data on a connected socket. ]
+ ]
+
+ [
+ [[link boost_asio.reference.basic_datagram_socket.receive_from [*receive_from]]]
+ [Receive a datagram with the endpoint of the sender. ]
+ ]
+
+ [
+ [[link boost_asio.reference.basic_datagram_socket.remote_endpoint [*remote_endpoint]]]
+ [Get the remote endpoint of the socket. ]
+ ]
+
+ [
+ [[link boost_asio.reference.basic_datagram_socket.send [*send]]]
+ [Send some data on a connected socket. ]
+ ]
+
+ [
+ [[link boost_asio.reference.basic_datagram_socket.send_to [*send_to]]]
+ [Send a datagram to the specified endpoint. ]
+ ]
+
+ [
+ [[link boost_asio.reference.basic_datagram_socket.set_option [*set_option]]]
+ [Set an option on the socket. ]
+ ]
+
+ [
+ [[link boost_asio.reference.basic_datagram_socket.shutdown [*shutdown]]]
+ [Disable sends or receives on the socket. ]
+ ]
+
+]
 
-[variablelist
+[heading Data Members]
+[table
+ [[Name][Description]]
+
+ [
+ [[link boost_asio.reference.basic_datagram_socket.max_connections [*max_connections]]]
+ [The maximum length of the queue of pending incoming connections. ]
+ ]
+
+ [
+ [[link boost_asio.reference.basic_datagram_socket.message_do_not_route [*message_do_not_route]]]
+ [Specify that the data should not be subject to routing. ]
+ ]
+
+ [
+ [[link boost_asio.reference.basic_datagram_socket.message_out_of_band [*message_out_of_band]]]
+ [Process out-of-band data. ]
+ ]
+
+ [
+ [[link boost_asio.reference.basic_datagram_socket.message_peek [*message_peek]]]
+ [Peek at incoming data without removing it from the input queue. ]
+ ]
+
+]
+
+[heading Protected Data Members]
+[table
+ [[Name][Description]]
+
+ [
+ [[link boost_asio.reference.basic_datagram_socket.implementation [*implementation]]]
+ [The underlying implementation of the I/O object. ]
+ ]
+
+ [
+ [[link boost_asio.reference.basic_datagram_socket.service [*service]]]
+ [The service associated with the I/O object. ]
+ ]
+
+]
+
+The basic_datagram_socket class template provides asynchronous and blocking datagram-oriented socket functionality.
+
+
+[heading Thread Safety]
   
-[[boost::system::system_error][Thrown on failure. ]]
+[*Distinct] [*objects:] Safe.
+
+[*Shared] [*objects:] Unsafe.
+
+
+
+
+[endsect]
+
+
+
+[section:type local::datagram_protocol::type]
+
+Obtain an identifier for the type of the protocol.
+
+ int type() const;
+
+
+
+[endsect]
+
+
+
+[endsect]
+
+[section:local__stream_protocol local::stream_protocol]
+
+Encapsulates the flags needed for stream-oriented UNIX sockets.
+
+ class stream_protocol
+
+
+[heading Types]
+[table
+ [[Name][Description]]
+
+ [
+
+ [[link boost_asio.reference.local__stream_protocol.acceptor [*acceptor]]]
+ [The UNIX domain acceptor type. ]
+
+ ]
+
+ [
+
+ [[link boost_asio.reference.local__stream_protocol.endpoint [*endpoint]]]
+ [The type of a UNIX domain endpoint. ]
+
+ ]
+
+ [
+
+ [[link boost_asio.reference.local__stream_protocol.iostream [*iostream]]]
+ [The UNIX domain iostream type. ]
+
+ ]
+
+ [
+
+ [[link boost_asio.reference.local__stream_protocol.socket [*socket]]]
+ [The UNIX domain socket type. ]
+
+ ]
+
+]
 
+[heading Member Functions]
+[table
+ [[Name][Description]]
+
+ [
+ [[link boost_asio.reference.local__stream_protocol.family [*family]]]
+ [Obtain an identifier for the protocol family. ]
+ ]
+
+ [
+ [[link boost_asio.reference.local__stream_protocol.protocol [*protocol]]]
+ [Obtain an identifier for the protocol. ]
+ ]
+
+ [
+ [[link boost_asio.reference.local__stream_protocol.type [*type]]]
+ [Obtain an identifier for the type of the protocol. ]
+ ]
+
 ]
 
+The
+[link boost_asio.reference.local__stream_protocol local::stream_protocol] class contains flags necessary for stream-oriented UNIX domain sockets.
+
+
+[heading Thread Safety]
+
+[*Distinct] [*objects:] Safe.
+
+[*Shared] [*objects:] Safe.
+
+
+
+[section:acceptor local::stream_protocol::acceptor]
+
+The UNIX domain acceptor type.
+
+ typedef basic_socket_acceptor< stream_protocol > acceptor;
+
+
+[heading Types]
+[table
+ [[Name][Description]]
+
+ [
+
+ [[link boost_asio.reference.basic_socket_acceptor.broadcast [*broadcast]]]
+ [Socket option to permit sending of broadcast messages. ]
+
+ ]
+
+ [
+
+ [[link boost_asio.reference.basic_socket_acceptor.bytes_readable [*bytes_readable]]]
+ [IO control command to get the amount of data that can be read without blocking. ]
+
+ ]
+
+ [
+
+ [[link boost_asio.reference.basic_socket_acceptor.debug [*debug]]]
+ [Socket option to enable socket-level debugging. ]
+
+ ]
+
+ [
+
+ [[link boost_asio.reference.basic_socket_acceptor.do_not_route [*do_not_route]]]
+ [Socket option to prevent routing, use local interfaces only. ]
+
+ ]
+
+ [
+
+ [[link boost_asio.reference.basic_socket_acceptor.enable_connection_aborted [*enable_connection_aborted]]]
+ [Socket option to report aborted connections on accept. ]
+
+ ]
+
+ [
+
+ [[link boost_asio.reference.basic_socket_acceptor.endpoint_type [*endpoint_type]]]
+ [The endpoint type. ]
+
+ ]
+
+ [
+
+ [[link boost_asio.reference.basic_socket_acceptor.implementation_type [*implementation_type]]]
+ [The underlying implementation type of I/O object. ]
+
+ ]
+
+ [
+
+ [[link boost_asio.reference.basic_socket_acceptor.keep_alive [*keep_alive]]]
+ [Socket option to send keep-alives. ]
+
+ ]
+
+ [
+
+ [[link boost_asio.reference.basic_socket_acceptor.linger [*linger]]]
+ [Socket option to specify whether the socket lingers on close if unsent data is present. ]
+
+ ]
+
+ [
+
+ [[link boost_asio.reference.basic_socket_acceptor.message_flags [*message_flags]]]
+ [Bitmask type for flags that can be passed to send and receive operations. ]
+
+ ]
+
+ [
+
+ [[link boost_asio.reference.basic_socket_acceptor.native_type [*native_type]]]
+ [The native representation of an acceptor. ]
+
+ ]
+
+ [
+
+ [[link boost_asio.reference.basic_socket_acceptor.non_blocking_io [*non_blocking_io]]]
+ [IO control command to set the blocking mode of the socket. ]
+
+ ]
+
+ [
+
+ [[link boost_asio.reference.basic_socket_acceptor.protocol_type [*protocol_type]]]
+ [The protocol type. ]
+
+ ]
+
+ [
+
+ [[link boost_asio.reference.basic_socket_acceptor.receive_buffer_size [*receive_buffer_size]]]
+ [Socket option for the receive buffer size of a socket. ]
+
+ ]
+
+ [
+
+ [[link boost_asio.reference.basic_socket_acceptor.receive_low_watermark [*receive_low_watermark]]]
+ [Socket option for the receive low watermark. ]
+
+ ]
+
+ [
+
+ [[link boost_asio.reference.basic_socket_acceptor.reuse_address [*reuse_address]]]
+ [Socket option to allow the socket to be bound to an address that is already in use. ]
+
+ ]
+
+ [
+
+ [[link boost_asio.reference.basic_socket_acceptor.send_buffer_size [*send_buffer_size]]]
+ [Socket option for the send buffer size of a socket. ]
+
+ ]
+
+ [
+
+ [[link boost_asio.reference.basic_socket_acceptor.send_low_watermark [*send_low_watermark]]]
+ [Socket option for the send low watermark. ]
+
+ ]
+
+ [
+
+ [[link boost_asio.reference.basic_socket_acceptor.service_type [*service_type]]]
+ [The type of the service that will be used to provide I/O operations. ]
+
+ ]
+
+ [
+
+ [[link boost_asio.reference.basic_socket_acceptor.shutdown_type [*shutdown_type]]]
+ [Different ways a socket may be shutdown. ]
+
+ ]
+
+]
+
+[heading Member Functions]
+[table
+ [[Name][Description]]
+
+ [
+ [[link boost_asio.reference.basic_socket_acceptor.accept [*accept]]]
+ [Accept a new connection. ]
+ ]
+
+ [
+ [[link boost_asio.reference.basic_socket_acceptor.assign [*assign]]]
+ [Assigns an existing native acceptor to the acceptor. ]
+ ]
+
+ [
+ [[link boost_asio.reference.basic_socket_acceptor.async_accept [*async_accept]]]
+ [Start an asynchronous accept. ]
+ ]
+
+ [
+ [[link boost_asio.reference.basic_socket_acceptor.basic_socket_acceptor [*basic_socket_acceptor]]]
+ [Construct an acceptor without opening it. ]
+ ]
+
+ [
+ [[link boost_asio.reference.basic_socket_acceptor.bind [*bind]]]
+ [Bind the acceptor to the given local endpoint. ]
+ ]
+
+ [
+ [[link boost_asio.reference.basic_socket_acceptor.cancel [*cancel]]]
+ [Cancel all asynchronous operations associated with the acceptor. ]
+ ]
+
+ [
+ [[link boost_asio.reference.basic_socket_acceptor.close [*close]]]
+ [Close the acceptor. ]
+ ]
+
+ [
+ [[link boost_asio.reference.basic_socket_acceptor.get_io_service [*get_io_service]]]
+ [Get the io_service associated with the object. ]
+ ]
+
+ [
+ [[link boost_asio.reference.basic_socket_acceptor.get_option [*get_option]]]
+ [Get an option from the acceptor. ]
+ ]
+
+ [
+ [[link boost_asio.reference.basic_socket_acceptor.io_service [*io_service]]]
+ [(Deprecated: use get_io_service().) Get the io_service associated with the object. ]
+ ]
+
+ [
+ [[link boost_asio.reference.basic_socket_acceptor.is_open [*is_open]]]
+ [Determine whether the acceptor is open. ]
+ ]
+
+ [
+ [[link boost_asio.reference.basic_socket_acceptor.listen [*listen]]]
+ [Place the acceptor into the state where it will listen for new connections. ]
+ ]
+
+ [
+ [[link boost_asio.reference.basic_socket_acceptor.local_endpoint [*local_endpoint]]]
+ [Get the local endpoint of the acceptor. ]
+ ]
+
+ [
+ [[link boost_asio.reference.basic_socket_acceptor.native [*native]]]
+ [Get the native acceptor representation. ]
+ ]
+
+ [
+ [[link boost_asio.reference.basic_socket_acceptor.open [*open]]]
+ [Open the acceptor using the specified protocol. ]
+ ]
+
+ [
+ [[link boost_asio.reference.basic_socket_acceptor.set_option [*set_option]]]
+ [Set an option on the acceptor. ]
+ ]
+
+]
+
+[heading Data Members]
+[table
+ [[Name][Description]]
+
+ [
+ [[link boost_asio.reference.basic_socket_acceptor.max_connections [*max_connections]]]
+ [The maximum length of the queue of pending incoming connections. ]
+ ]
+
+ [
+ [[link boost_asio.reference.basic_socket_acceptor.message_do_not_route [*message_do_not_route]]]
+ [Specify that the data should not be subject to routing. ]
+ ]
+
+ [
+ [[link boost_asio.reference.basic_socket_acceptor.message_out_of_band [*message_out_of_band]]]
+ [Process out-of-band data. ]
+ ]
+
+ [
+ [[link boost_asio.reference.basic_socket_acceptor.message_peek [*message_peek]]]
+ [Peek at incoming data without removing it from the input queue. ]
+ ]
+
+]
+
+[heading Protected Data Members]
+[table
+ [[Name][Description]]
+
+ [
+ [[link boost_asio.reference.basic_socket_acceptor.implementation [*implementation]]]
+ [The underlying implementation of the I/O object. ]
+ ]
+
+ [
+ [[link boost_asio.reference.basic_socket_acceptor.service [*service]]]
+ [The service associated with the I/O object. ]
+ ]
+
+]
+
+The basic_socket_acceptor class template is used for accepting new socket connections.
+
+
+[heading Thread Safety]
+
+[*Distinct] [*objects:] Safe.
+
+[*Shared] [*objects:] Unsafe.
+
+[heading Example]
+
+Opening a socket acceptor with the SO\_REUSEADDR option enabled:
+
+ boost::asio::ip::tcp::acceptor acceptor(io_service);
+ boost::asio::ip::tcp::endpoint endpoint(boost::asio::ip::tcp::v4(), port);
+ acceptor.open(endpoint.protocol());
+ acceptor.set_option(boost::asio::ip::tcp::acceptor::reuse_address(true));
+ acceptor.bind(endpoint);
+ acceptor.listen();
+
+
+
+
+
+
+
+[endsect]
+
+
+
+[section:endpoint local::stream_protocol::endpoint]
+
+The type of a UNIX domain endpoint.
+
+ typedef basic_endpoint< stream_protocol > endpoint;
+
+
+[heading Types]
+[table
+ [[Name][Description]]
+
+ [
+
+ [[link boost_asio.reference.local__basic_endpoint.data_type [*data_type]]]
+ [The type of the endpoint structure. This type is dependent on the underlying implementation of the socket layer. ]
+
+ ]
+
+ [
+
+ [[link boost_asio.reference.local__basic_endpoint.protocol_type [*protocol_type]]]
+ [The protocol type associated with the endpoint. ]
+
+ ]
+
+]
+
+[heading Member Functions]
+[table
+ [[Name][Description]]
+
+ [
+ [[link boost_asio.reference.local__basic_endpoint.basic_endpoint [*basic_endpoint]]]
+ [Default constructor. ]
+ ]
+
+ [
+ [[link boost_asio.reference.local__basic_endpoint.capacity [*capacity]]]
+ [Get the capacity of the endpoint in the native type. ]
+ ]
+
+ [
+ [[link boost_asio.reference.local__basic_endpoint.data [*data]]]
+ [Get the underlying endpoint in the native type. ]
+ ]
+
+ [
+ [[link boost_asio.reference.local__basic_endpoint.operator_eq_ [*operator=]]]
+ [Assign from another endpoint. ]
+ ]
+
+ [
+ [[link boost_asio.reference.local__basic_endpoint.path [*path]]]
+ [Get the path associated with the endpoint. ]
+ ]
+
+ [
+ [[link boost_asio.reference.local__basic_endpoint.protocol [*protocol]]]
+ [The protocol associated with the endpoint. ]
+ ]
+
+ [
+ [[link boost_asio.reference.local__basic_endpoint.resize [*resize]]]
+ [Set the underlying size of the endpoint in the native type. ]
+ ]
+
+ [
+ [[link boost_asio.reference.local__basic_endpoint.size [*size]]]
+ [Get the underlying size of the endpoint in the native type. ]
+ ]
+
+]
+
+[heading Friends]
+[table
+ [[Name][Description]]
+
+ [
+ [[link boost_asio.reference.local__basic_endpoint.operator_not__eq_ [*operator!=]]]
+ [Compare two endpoints for inequality. ]
+ ]
+
+ [
+ [[link boost_asio.reference.local__basic_endpoint.operator_lt_ [*operator<]]]
+ [Compare endpoints for ordering. ]
+ ]
+
+ [
+ [[link boost_asio.reference.local__basic_endpoint.operator_eq__eq_ [*operator==]]]
+ [Compare two endpoints for equality. ]
+ ]
+
+]
+
+[heading Related Functions]
+[table
+ [[Name][Description]]
+
+ [
+ [[link boost_asio.reference.local__basic_endpoint.operator_lt__lt_ [*operator<<]]]
+ [Output an endpoint as a string. ]
+ ]
+
+]
+
+The
+[link boost_asio.reference.local__basic_endpoint local::basic_endpoint] class template describes an endpoint that may be associated with a particular UNIX socket.
+
+
+[heading Thread Safety]
+
+[*Distinct] [*objects:] Safe.
+
+[*Shared] [*objects:] Unsafe.
+
+
+
+
+[endsect]
+
+
+
+[section:family local::stream_protocol::family]
+
+Obtain an identifier for the protocol family.
+
+ int family() const;
+
+
+
+[endsect]
+
+
+
+[section:iostream local::stream_protocol::iostream]
+
+The UNIX domain iostream type.
+
+ typedef basic_socket_iostream< stream_protocol > iostream;
+
+
+[heading Member Functions]
+[table
+ [[Name][Description]]
+
+ [
+ [[link boost_asio.reference.basic_socket_iostream.basic_socket_iostream [*basic_socket_iostream]]]
+ [Construct a basic_socket_iostream without establishing a connection. ]
+ ]
+
+ [
+ [[link boost_asio.reference.basic_socket_iostream.close [*close]]]
+ [Close the connection. ]
+ ]
+
+ [
+ [[link boost_asio.reference.basic_socket_iostream.connect [*connect]]]
+ [Establish a connection to an endpoint corresponding to a resolver query. ]
+ ]
+
+ [
+ [[link boost_asio.reference.basic_socket_iostream.rdbuf [*rdbuf]]]
+ [Return a pointer to the underlying streambuf. ]
+ ]
+
+]
+
+
+
+[endsect]
+
+
+
+[section:protocol local::stream_protocol::protocol]
+
+Obtain an identifier for the protocol.
+
+ int protocol() const;
+
+
+
+[endsect]
+
+
+
+[section:socket local::stream_protocol::socket]
+
+The UNIX domain socket type.
+
+ typedef basic_stream_socket< stream_protocol > socket;
+
+
+[heading Types]
+[table
+ [[Name][Description]]
+
+ [
+
+ [[link boost_asio.reference.basic_stream_socket.broadcast [*broadcast]]]
+ [Socket option to permit sending of broadcast messages. ]
+
+ ]
+
+ [
+
+ [[link boost_asio.reference.basic_stream_socket.bytes_readable [*bytes_readable]]]
+ [IO control command to get the amount of data that can be read without blocking. ]
+
+ ]
+
+ [
+
+ [[link boost_asio.reference.basic_stream_socket.debug [*debug]]]
+ [Socket option to enable socket-level debugging. ]
+
+ ]
+
+ [
+
+ [[link boost_asio.reference.basic_stream_socket.do_not_route [*do_not_route]]]
+ [Socket option to prevent routing, use local interfaces only. ]
+
+ ]
+
+ [
+
+ [[link boost_asio.reference.basic_stream_socket.enable_connection_aborted [*enable_connection_aborted]]]
+ [Socket option to report aborted connections on accept. ]
+
+ ]
+
+ [
+
+ [[link boost_asio.reference.basic_stream_socket.endpoint_type [*endpoint_type]]]
+ [The endpoint type. ]
+
+ ]
+
+ [
+
+ [[link boost_asio.reference.basic_stream_socket.implementation_type [*implementation_type]]]
+ [The underlying implementation type of I/O object. ]
+
+ ]
+
+ [
+
+ [[link boost_asio.reference.basic_stream_socket.keep_alive [*keep_alive]]]
+ [Socket option to send keep-alives. ]
+
+ ]
+
+ [
+
+ [[link boost_asio.reference.basic_stream_socket.linger [*linger]]]
+ [Socket option to specify whether the socket lingers on close if unsent data is present. ]
+
+ ]
+
+ [
+
+ [[link boost_asio.reference.basic_stream_socket.lowest_layer_type [*lowest_layer_type]]]
+ [A basic_socket is always the lowest layer. ]
+
+ ]
+
+ [
+
+ [[link boost_asio.reference.basic_stream_socket.message_flags [*message_flags]]]
+ [Bitmask type for flags that can be passed to send and receive operations. ]
+
+ ]
+
+ [
+
+ [[link boost_asio.reference.basic_stream_socket.native_type [*native_type]]]
+ [The native representation of a socket. ]
+
+ ]
+
+ [
+
+ [[link boost_asio.reference.basic_stream_socket.non_blocking_io [*non_blocking_io]]]
+ [IO control command to set the blocking mode of the socket. ]
+
+ ]
+
+ [
+
+ [[link boost_asio.reference.basic_stream_socket.protocol_type [*protocol_type]]]
+ [The protocol type. ]
+
+ ]
+
+ [
+
+ [[link boost_asio.reference.basic_stream_socket.receive_buffer_size [*receive_buffer_size]]]
+ [Socket option for the receive buffer size of a socket. ]
+
+ ]
+
+ [
+
+ [[link boost_asio.reference.basic_stream_socket.receive_low_watermark [*receive_low_watermark]]]
+ [Socket option for the receive low watermark. ]
+
+ ]
+
+ [
+
+ [[link boost_asio.reference.basic_stream_socket.reuse_address [*reuse_address]]]
+ [Socket option to allow the socket to be bound to an address that is already in use. ]
+
+ ]
+
+ [
+
+ [[link boost_asio.reference.basic_stream_socket.send_buffer_size [*send_buffer_size]]]
+ [Socket option for the send buffer size of a socket. ]
+
+ ]
+
+ [
+
+ [[link boost_asio.reference.basic_stream_socket.send_low_watermark [*send_low_watermark]]]
+ [Socket option for the send low watermark. ]
+
+ ]
+
+ [
+
+ [[link boost_asio.reference.basic_stream_socket.service_type [*service_type]]]
+ [The type of the service that will be used to provide I/O operations. ]
+
+ ]
+
+ [
+
+ [[link boost_asio.reference.basic_stream_socket.shutdown_type [*shutdown_type]]]
+ [Different ways a socket may be shutdown. ]
+
+ ]
+
+]
+
+[heading Member Functions]
+[table
+ [[Name][Description]]
+
+ [
+ [[link boost_asio.reference.basic_stream_socket.assign [*assign]]]
+ [Assign an existing native socket to the socket. ]
+ ]
+
+ [
+ [[link boost_asio.reference.basic_stream_socket.async_connect [*async_connect]]]
+ [Start an asynchronous connect. ]
+ ]
+
+ [
+ [[link boost_asio.reference.basic_stream_socket.async_read_some [*async_read_some]]]
+ [Start an asynchronous read. ]
+ ]
+
+ [
+ [[link boost_asio.reference.basic_stream_socket.async_receive [*async_receive]]]
+ [Start an asynchronous receive. ]
+ ]
+
+ [
+ [[link boost_asio.reference.basic_stream_socket.async_send [*async_send]]]
+ [Start an asynchronous send. ]
+ ]
+
+ [
+ [[link boost_asio.reference.basic_stream_socket.async_write_some [*async_write_some]]]
+ [Start an asynchronous write. ]
+ ]
+
+ [
+ [[link boost_asio.reference.basic_stream_socket.at_mark [*at_mark]]]
+ [Determine whether the socket is at the out-of-band data mark. ]
+ ]
+
+ [
+ [[link boost_asio.reference.basic_stream_socket.available [*available]]]
+ [Determine the number of bytes available for reading. ]
+ ]
+
+ [
+ [[link boost_asio.reference.basic_stream_socket.basic_stream_socket [*basic_stream_socket]]]
+ [Construct a basic_stream_socket without opening it. ]
+ ]
+
+ [
+ [[link boost_asio.reference.basic_stream_socket.bind [*bind]]]
+ [Bind the socket to the given local endpoint. ]
+ ]
+
+ [
+ [[link boost_asio.reference.basic_stream_socket.cancel [*cancel]]]
+ [Cancel all asynchronous operations associated with the socket. ]
+ ]
+
+ [
+ [[link boost_asio.reference.basic_stream_socket.close [*close]]]
+ [Close the socket. ]
+ ]
+
+ [
+ [[link boost_asio.reference.basic_stream_socket.connect [*connect]]]
+ [Connect the socket to the specified endpoint. ]
+ ]
+
+ [
+ [[link boost_asio.reference.basic_stream_socket.get_io_service [*get_io_service]]]
+ [Get the io_service associated with the object. ]
+ ]
+
+ [
+ [[link boost_asio.reference.basic_stream_socket.get_option [*get_option]]]
+ [Get an option from the socket. ]
+ ]
+
+ [
+ [[link boost_asio.reference.basic_stream_socket.io_control [*io_control]]]
+ [Perform an IO control command on the socket. ]
+ ]
+
+ [
+ [[link boost_asio.reference.basic_stream_socket.io_service [*io_service]]]
+ [(Deprecated: use get_io_service().) Get the io_service associated with the object. ]
+ ]
+
+ [
+ [[link boost_asio.reference.basic_stream_socket.is_open [*is_open]]]
+ [Determine whether the socket is open. ]
+ ]
+
+ [
+ [[link boost_asio.reference.basic_stream_socket.local_endpoint [*local_endpoint]]]
+ [Get the local endpoint of the socket. ]
+ ]
+
+ [
+ [[link boost_asio.reference.basic_stream_socket.lowest_layer [*lowest_layer]]]
+ [Get a reference to the lowest layer. ]
+ ]
+
+ [
+ [[link boost_asio.reference.basic_stream_socket.native [*native]]]
+ [Get the native socket representation. ]
+ ]
+
+ [
+ [[link boost_asio.reference.basic_stream_socket.open [*open]]]
+ [Open the socket using the specified protocol. ]
+ ]
+
+ [
+ [[link boost_asio.reference.basic_stream_socket.read_some [*read_some]]]
+ [Read some data from the socket. ]
+ ]
+
+ [
+ [[link boost_asio.reference.basic_stream_socket.receive [*receive]]]
+ [Receive some data on the socket. ]
+ ]
+
+ [
+ [[link boost_asio.reference.basic_stream_socket.remote_endpoint [*remote_endpoint]]]
+ [Get the remote endpoint of the socket. ]
+ ]
+
+ [
+ [[link boost_asio.reference.basic_stream_socket.send [*send]]]
+ [Send some data on the socket. ]
+ ]
+
+ [
+ [[link boost_asio.reference.basic_stream_socket.set_option [*set_option]]]
+ [Set an option on the socket. ]
+ ]
+
+ [
+ [[link boost_asio.reference.basic_stream_socket.shutdown [*shutdown]]]
+ [Disable sends or receives on the socket. ]
+ ]
+
+ [
+ [[link boost_asio.reference.basic_stream_socket.write_some [*write_some]]]
+ [Write some data to the socket. ]
+ ]
+
+]
+
+[heading Data Members]
+[table
+ [[Name][Description]]
+
+ [
+ [[link boost_asio.reference.basic_stream_socket.max_connections [*max_connections]]]
+ [The maximum length of the queue of pending incoming connections. ]
+ ]
+
+ [
+ [[link boost_asio.reference.basic_stream_socket.message_do_not_route [*message_do_not_route]]]
+ [Specify that the data should not be subject to routing. ]
+ ]
+
+ [
+ [[link boost_asio.reference.basic_stream_socket.message_out_of_band [*message_out_of_band]]]
+ [Process out-of-band data. ]
+ ]
+
+ [
+ [[link boost_asio.reference.basic_stream_socket.message_peek [*message_peek]]]
+ [Peek at incoming data without removing it from the input queue. ]
+ ]
+
+]
+
+[heading Protected Data Members]
+[table
+ [[Name][Description]]
+
+ [
+ [[link boost_asio.reference.basic_stream_socket.implementation [*implementation]]]
+ [The underlying implementation of the I/O object. ]
+ ]
+
+ [
+ [[link boost_asio.reference.basic_stream_socket.service [*service]]]
+ [The service associated with the I/O object. ]
+ ]
+
+]
+
+The basic_stream_socket class template provides asynchronous and blocking stream-oriented socket functionality.
+
+
+[heading Thread Safety]
+
+[*Distinct] [*objects:] Safe.
+
+[*Shared] [*objects:] Unsafe.
+
+
+
+
+[endsect]
+
+
+
+[section:type local::stream_protocol::type]
+
+Obtain an identifier for the type of the protocol.
+
+ int type() const;
+
+
+
+[endsect]
+
+
+
+[endsect]
+
+[section:mutable_buffer mutable_buffer]
+
+Holds a buffer that can be modified.
+
+ class mutable_buffer
+
+
+[heading Member Functions]
+[table
+ [[Name][Description]]
+
+ [
+ [[link boost_asio.reference.mutable_buffer.mutable_buffer [*mutable_buffer]]]
+ [Construct an empty buffer. ]
+ ]
+
+]
+
+[heading Related Functions]
+[table
+ [[Name][Description]]
+
+ [
+ [[link boost_asio.reference.mutable_buffer.buffer_cast [*buffer_cast]]]
+ [Cast a non-modifiable buffer to a specified pointer to POD type. ]
+ ]
+
+ [
+ [[link boost_asio.reference.mutable_buffer.buffer_size [*buffer_size]]]
+ [Get the number of bytes in a non-modifiable buffer. ]
+ ]
+
+ [
+ [[link boost_asio.reference.mutable_buffer.operator_plus_ [*operator+]]]
+ [Create a new modifiable buffer that is offset from the start of another. ]
+ ]
+
+]
+
+The mutable_buffer class provides a safe representation of a buffer that can be modified. It does not own the underlying data, and so is cheap to copy or assign.
+
+
+[section:buffer_cast mutable_buffer::buffer_cast]
+
+Cast a non-modifiable buffer to a specified pointer to POD type.
+
+ template<
+ typename ``[link boost_asio.reference.PointerToPodType PointerToPodType]``>
+ PointerToPodType buffer_cast(
+ const mutable_buffer & b);
+
+
+
+[endsect]
+
+
+
+[section:buffer_size mutable_buffer::buffer_size]
+
+Get the number of bytes in a non-modifiable buffer.
+
+ std::size_t buffer_size(
+ const mutable_buffer & b);
+
+
+
+[endsect]
+
+
+[section:mutable_buffer mutable_buffer::mutable_buffer]
+
+Construct an empty buffer.
+
+ ``[link boost_asio.reference.mutable_buffer.mutable_buffer.overload1 mutable_buffer]``();
+
+ ``[link boost_asio.reference.mutable_buffer.mutable_buffer.overload2 mutable_buffer]``(
+ void * data,
+ std::size_t size);
+
+
+[section:overload1 mutable_buffer::mutable_buffer (1 of 2 overloads)]
+
+Construct an empty buffer.
+
+ mutable_buffer();
+
+
+
+[endsect]
+
+
+
+[section:overload2 mutable_buffer::mutable_buffer (2 of 2 overloads)]
+
+Construct a buffer to represent a given memory range.
+
+ mutable_buffer(
+ void * data,
+ std::size_t size);
+
+
+
+[endsect]
+
+
+[endsect]
+
+[section:operator_plus_ mutable_buffer::operator+]
+
+Create a new modifiable buffer that is offset from the start of another.
+
+ mutable_buffer ``[link boost_asio.reference.mutable_buffer.operator_plus_.overload1 operator+]``(
+ const mutable_buffer & b,
+ std::size_t start);
+
+ mutable_buffer ``[link boost_asio.reference.mutable_buffer.operator_plus_.overload2 operator+]``(
+ std::size_t start,
+ const mutable_buffer & b);
+
+
+[section:overload1 mutable_buffer::operator+ (1 of 2 overloads)]
+
+Create a new modifiable buffer that is offset from the start of another.
+
+ mutable_buffer operator+(
+ const mutable_buffer & b,
+ std::size_t start);
+
+
+
+[endsect]
+
+
+
+[section:overload2 mutable_buffer::operator+ (2 of 2 overloads)]
+
+Create a new modifiable buffer that is offset from the start of another.
+
+ mutable_buffer operator+(
+ std::size_t start,
+ const mutable_buffer & b);
+
+
+
+[endsect]
+
+
+[endsect]
+
+
+[endsect]
+
+[section:mutable_buffers_1 mutable_buffers_1]
+
+Adapts a single modifiable buffer so that it meets the requirements of the MutableBufferSequence concept.
+
+ class mutable_buffers_1 :
+ public mutable_buffer
+
+
+[heading Types]
+[table
+ [[Name][Description]]
+
+ [
+
+ [[link boost_asio.reference.mutable_buffers_1.const_iterator [*const_iterator]]]
+ [A random-access iterator type that may be used to read elements. ]
+
+ ]
+
+ [
+
+ [[link boost_asio.reference.mutable_buffers_1.value_type [*value_type]]]
+ [The type for each element in the list of buffers. ]
+
+ ]
+
+]
+
+[heading Member Functions]
+[table
+ [[Name][Description]]
+
+ [
+ [[link boost_asio.reference.mutable_buffers_1.begin [*begin]]]
+ [Get a random-access iterator to the first element. ]
+ ]
+
+ [
+ [[link boost_asio.reference.mutable_buffers_1.end [*end]]]
+ [Get a random-access iterator for one past the last element. ]
+ ]
+
+ [
+ [[link boost_asio.reference.mutable_buffers_1.mutable_buffers_1 [*mutable_buffers_1]]]
+ [Construct to represent a single modifiable buffer. ]
+ ]
+
+]
+
+[heading Related Functions]
+[table
+ [[Name][Description]]
+
+ [
+ [[link boost_asio.reference.mutable_buffers_1.buffer_cast [*buffer_cast]]]
+ [Cast a non-modifiable buffer to a specified pointer to POD type. ]
+ ]
+
+ [
+ [[link boost_asio.reference.mutable_buffers_1.buffer_size [*buffer_size]]]
+ [Get the number of bytes in a non-modifiable buffer. ]
+ ]
+
+ [
+ [[link boost_asio.reference.mutable_buffers_1.operator_plus_ [*operator+]]]
+ [Create a new modifiable buffer that is offset from the start of another. ]
+ ]
+
+]
+
+
+[section:begin mutable_buffers_1::begin]
+
+Get a random-access iterator to the first element.
+
+ const_iterator begin() const;
+
+
+
+[endsect]
+
+
+
+[section:buffer_cast mutable_buffers_1::buffer_cast]
+
+
+['Inherited from mutable_buffer.]
+
+Cast a non-modifiable buffer to a specified pointer to POD type.
+
+ template<
+ typename ``[link boost_asio.reference.PointerToPodType PointerToPodType]``>
+ PointerToPodType buffer_cast(
+ const mutable_buffer & b);
+
+
+
+[endsect]
+
+
+
+[section:buffer_size mutable_buffers_1::buffer_size]
+
+
+['Inherited from mutable_buffer.]
+
+Get the number of bytes in a non-modifiable buffer.
+
+ std::size_t buffer_size(
+ const mutable_buffer & b);
+
+
+
+[endsect]
+
+
+
+[section:const_iterator mutable_buffers_1::const_iterator]
+
+A random-access iterator type that may be used to read elements.
+
+ typedef const mutable_buffer * const_iterator;
+
+
+
+
+[endsect]
+
+
+
+[section:end mutable_buffers_1::end]
+
+Get a random-access iterator for one past the last element.
+
+ const_iterator end() const;
+
+
+
+[endsect]
+
+
+
+[section:mutable_buffers_1 mutable_buffers_1::mutable_buffers_1]
+
+Construct to represent a single modifiable buffer.
+
+ mutable_buffers_1(
+ const mutable_buffer & b);
+
+
+
+[endsect]
+
+
+[section:operator_plus_ mutable_buffers_1::operator+]
+
+Create a new modifiable buffer that is offset from the start of another.
+
+ mutable_buffer ``[link boost_asio.reference.mutable_buffers_1.operator_plus_.overload1 operator+]``(
+ const mutable_buffer & b,
+ std::size_t start);
+
+ mutable_buffer ``[link boost_asio.reference.mutable_buffers_1.operator_plus_.overload2 operator+]``(
+ std::size_t start,
+ const mutable_buffer & b);
+
+
+[section:overload1 mutable_buffers_1::operator+ (1 of 2 overloads)]
+
+
+['Inherited from mutable_buffer.]
+
+Create a new modifiable buffer that is offset from the start of another.
+
+ mutable_buffer operator+(
+ const mutable_buffer & b,
+ std::size_t start);
+
+
+
+[endsect]
+
+
+
+[section:overload2 mutable_buffers_1::operator+ (2 of 2 overloads)]
+
+
+['Inherited from mutable_buffer.]
+
+Create a new modifiable buffer that is offset from the start of another.
+
+ mutable_buffer operator+(
+ std::size_t start,
+ const mutable_buffer & b);
+
+
+
+[endsect]
+
+
+[endsect]
+
+
+[section:value_type mutable_buffers_1::value_type]
+
+The type for each element in the list of buffers.
+
+ typedef mutable_buffer value_type;
+
+
+[heading Member Functions]
+[table
+ [[Name][Description]]
+
+ [
+ [[link boost_asio.reference.mutable_buffer.mutable_buffer [*mutable_buffer]]]
+ [Construct an empty buffer. ]
+ ]
+
+]
+
+[heading Related Functions]
+[table
+ [[Name][Description]]
+
+ [
+ [[link boost_asio.reference.mutable_buffer.buffer_cast [*buffer_cast]]]
+ [Cast a non-modifiable buffer to a specified pointer to POD type. ]
+ ]
+
+ [
+ [[link boost_asio.reference.mutable_buffer.buffer_size [*buffer_size]]]
+ [Get the number of bytes in a non-modifiable buffer. ]
+ ]
+
+ [
+ [[link boost_asio.reference.mutable_buffer.operator_plus_ [*operator+]]]
+ [Create a new modifiable buffer that is offset from the start of another. ]
+ ]
+
+]
+
+The mutable_buffer class provides a safe representation of a buffer that can be modified. It does not own the underlying data, and so is cheap to copy or assign.
+
+
+
+[endsect]
+
+
+
+[endsect]
+
+[section:null_buffers null_buffers]
+
+An implementation of both the ConstBufferSequence and MutableBufferSequence concepts to represent a null buffer sequence.
+
+ class null_buffers
+
+
+[heading Types]
+[table
+ [[Name][Description]]
+
+ [
+
+ [[link boost_asio.reference.null_buffers.const_iterator [*const_iterator]]]
+ [A random-access iterator type that may be used to read elements. ]
+
+ ]
+
+ [
+
+ [[link boost_asio.reference.null_buffers.value_type [*value_type]]]
+ [The type for each element in the list of buffers. ]
+
+ ]
+
+]
+
+[heading Member Functions]
+[table
+ [[Name][Description]]
+
+ [
+ [[link boost_asio.reference.null_buffers.begin [*begin]]]
+ [Get a random-access iterator to the first element. ]
+ ]
+
+ [
+ [[link boost_asio.reference.null_buffers.end [*end]]]
+ [Get a random-access iterator for one past the last element. ]
+ ]
+
+]
+
+
+[section:begin null_buffers::begin]
+
+Get a random-access iterator to the first element.
+
+ const_iterator begin() const;
+
+
+
+[endsect]
+
+
+
+[section:const_iterator null_buffers::const_iterator]
+
+A random-access iterator type that may be used to read elements.
+
+ typedef const mutable_buffer * const_iterator;
+
+
+
+
+[endsect]
+
+
+
+[section:end null_buffers::end]
+
+Get a random-access iterator for one past the last element.
+
+ const_iterator end() const;
+
+
+
+[endsect]
+
+
+
+[section:value_type null_buffers::value_type]
+
+The type for each element in the list of buffers.
+
+ typedef mutable_buffer value_type;
+
+
+[heading Member Functions]
+[table
+ [[Name][Description]]
+
+ [
+ [[link boost_asio.reference.mutable_buffer.mutable_buffer [*mutable_buffer]]]
+ [Construct an empty buffer. ]
+ ]
+
+]
+
+[heading Related Functions]
+[table
+ [[Name][Description]]
+
+ [
+ [[link boost_asio.reference.mutable_buffer.buffer_cast [*buffer_cast]]]
+ [Cast a non-modifiable buffer to a specified pointer to POD type. ]
+ ]
+
+ [
+ [[link boost_asio.reference.mutable_buffer.buffer_size [*buffer_size]]]
+ [Get the number of bytes in a non-modifiable buffer. ]
+ ]
+
+ [
+ [[link boost_asio.reference.mutable_buffer.operator_plus_ [*operator+]]]
+ [Create a new modifiable buffer that is offset from the start of another. ]
+ ]
+
+]
+
+The mutable_buffer class provides a safe representation of a buffer that can be modified. It does not own the underlying data, and so is cheap to copy or assign.
+
+
+
+[endsect]
+
+
+
+[endsect]
+
+
+[section:placeholders__bytes_transferred placeholders::bytes_transferred]
+
+An argument placeholder, for use with boost::bind(), that corresponds to the bytes_transferred argument of a handler for asynchronous functions such as boost::asio::basic_stream_socket::async_write_some or boost::asio::async_write.
+
+ unspecified bytes_transferred;
+
+
+
+[endsect]
+
+
+
+[section:placeholders__error placeholders::error]
+
+An argument placeholder, for use with boost::bind(), that corresponds to the error argument of a handler for any of the asynchronous functions.
+
+ unspecified error;
+
+
+
+[endsect]
+
+
+
+[section:placeholders__iterator placeholders::iterator]
+
+An argument placeholder, for use with boost::bind(), that corresponds to the iterator argument of a handler for asynchronous functions such as boost::asio::basic_resolver::resolve.
+
+ unspecified iterator;
+
+
+
+[endsect]
+
+
+[section:posix__basic_descriptor posix::basic_descriptor]
+
+Provides POSIX descriptor functionality.
+
+ template<
+ typename ``[link boost_asio.reference.DescriptorService DescriptorService]``>
+ class basic_descriptor :
+ public basic_io_object< DescriptorService >,
+ public posix::descriptor_base
+
+
+[heading Types]
+[table
+ [[Name][Description]]
+
+ [
+
+ [[link boost_asio.reference.posix__basic_descriptor.bytes_readable [*bytes_readable]]]
+ [IO control command to get the amount of data that can be read without blocking. ]
+
+ ]
+
+ [
+
+ [[link boost_asio.reference.posix__basic_descriptor.implementation_type [*implementation_type]]]
+ [The underlying implementation type of I/O object. ]
+
+ ]
+
+ [
+
+ [[link boost_asio.reference.posix__basic_descriptor.lowest_layer_type [*lowest_layer_type]]]
+ [A basic_descriptor is always the lowest layer. ]
+
+ ]
+
+ [
+
+ [[link boost_asio.reference.posix__basic_descriptor.native_type [*native_type]]]
+ [The native representation of a descriptor. ]
+
+ ]
+
+ [
+
+ [[link boost_asio.reference.posix__basic_descriptor.non_blocking_io [*non_blocking_io]]]
+ [IO control command to set the blocking mode of the descriptor. ]
+
+ ]
+
+ [
+
+ [[link boost_asio.reference.posix__basic_descriptor.service_type [*service_type]]]
+ [The type of the service that will be used to provide I/O operations. ]
+
+ ]
+
+]
+
+[heading Member Functions]
+[table
+ [[Name][Description]]
+
+ [
+ [[link boost_asio.reference.posix__basic_descriptor.assign [*assign]]]
+ [Assign an existing native descriptor to the descriptor. ]
+ ]
+
+ [
+ [[link boost_asio.reference.posix__basic_descriptor.basic_descriptor [*basic_descriptor]]]
+ [Construct a basic_descriptor without opening it. ]
+ ]
+
+ [
+ [[link boost_asio.reference.posix__basic_descriptor.cancel [*cancel]]]
+ [Cancel all asynchronous operations associated with the descriptor. ]
+ ]
+
+ [
+ [[link boost_asio.reference.posix__basic_descriptor.close [*close]]]
+ [Close the descriptor. ]
+ ]
+
+ [
+ [[link boost_asio.reference.posix__basic_descriptor.get_io_service [*get_io_service]]]
+ [Get the io_service associated with the object. ]
+ ]
+
+ [
+ [[link boost_asio.reference.posix__basic_descriptor.io_control [*io_control]]]
+ [Perform an IO control command on the descriptor. ]
+ ]
+
+ [
+ [[link boost_asio.reference.posix__basic_descriptor.io_service [*io_service]]]
+ [(Deprecated: use get_io_service().) Get the io_service associated with the object. ]
+ ]
+
+ [
+ [[link boost_asio.reference.posix__basic_descriptor.is_open [*is_open]]]
+ [Determine whether the descriptor is open. ]
+ ]
+
+ [
+ [[link boost_asio.reference.posix__basic_descriptor.lowest_layer [*lowest_layer]]]
+ [Get a reference to the lowest layer. ]
+ ]
+
+ [
+ [[link boost_asio.reference.posix__basic_descriptor.native [*native]]]
+ [Get the native descriptor representation. ]
+ ]
+
+]
+
+[heading Protected Member Functions]
+[table
+ [[Name][Description]]
+
+ [
+ [[link boost_asio.reference.posix__basic_descriptor._basic_descriptor [*~basic_descriptor]]]
+ [Protected destructor to prevent deletion through this type. ]
+ ]
+
+]
+
+[heading Protected Data Members]
+[table
+ [[Name][Description]]
+
+ [
+ [[link boost_asio.reference.posix__basic_descriptor.implementation [*implementation]]]
+ [The underlying implementation of the I/O object. ]
+ ]
+
+ [
+ [[link boost_asio.reference.posix__basic_descriptor.service [*service]]]
+ [The service associated with the I/O object. ]
+ ]
+
+]
+
+The posix::basic_descriptor class template provides the ability to wrap a POSIX descriptor.
+
+
+[heading Thread Safety]
+
+[*Distinct] [*objects:] Safe.
+
+[*Shared] [*objects:] Unsafe.
+
+
+[section:assign posix::basic_descriptor::assign]
+
+Assign an existing native descriptor to the descriptor.
+
+ void ``[link boost_asio.reference.posix__basic_descriptor.assign.overload1 assign]``(
+ const native_type & native_descriptor);
+
+ boost::system::error_code ``[link boost_asio.reference.posix__basic_descriptor.assign.overload2 assign]``(
+ const native_type & native_descriptor,
+ boost::system::error_code & ec);
+
+
+[section:overload1 posix::basic_descriptor::assign (1 of 2 overloads)]
+
+Assign an existing native descriptor to the descriptor.
+
+ void assign(
+ const native_type & native_descriptor);
+
+
+
+[endsect]
+
+
+
+[section:overload2 posix::basic_descriptor::assign (2 of 2 overloads)]
+
+Assign an existing native descriptor to the descriptor.
+
+ boost::system::error_code assign(
+ const native_type & native_descriptor,
+ boost::system::error_code & ec);
+
+
+
+[endsect]
+
+
+[endsect]
+
+[section:basic_descriptor posix::basic_descriptor::basic_descriptor]
+
+Construct a basic_descriptor without opening it.
+
+ ``[link boost_asio.reference.posix__basic_descriptor.basic_descriptor.overload1 basic_descriptor]``(
+ boost::asio::io_service & io_service);
+
+ ``[link boost_asio.reference.posix__basic_descriptor.basic_descriptor.overload2 basic_descriptor]``(
+ boost::asio::io_service & io_service,
+ const native_type & native_descriptor);
+
+
+[section:overload1 posix::basic_descriptor::basic_descriptor (1 of 2 overloads)]
+
+Construct a basic_descriptor without opening it.
+
+ basic_descriptor(
+ boost::asio::io_service & io_service);
+
+
+This constructor creates a descriptor without opening it.
+
+
+[heading Parameters]
+
+
+[variablelist
+
+[[io_service][The io\_service object that the descriptor will use to dispatch handlers for any asynchronous operations performed on the descriptor. ]]
+
+]
+
+
+
+[endsect]
+
+
+
+[section:overload2 posix::basic_descriptor::basic_descriptor (2 of 2 overloads)]
+
+Construct a basic_descriptor on an existing native descriptor.
+
+ basic_descriptor(
+ boost::asio::io_service & io_service,
+ const native_type & native_descriptor);
+
+
+This constructor creates a descriptor object to hold an existing native descriptor.
+
+
+[heading Parameters]
+
+
+[variablelist
+
+[[io_service][The io\_service object that the descriptor will use to dispatch handlers for any asynchronous operations performed on the descriptor.]]
+
+[[native_descriptor][A native descriptor.]]
+
+]
+
+[heading Exceptions]
+
+
+[variablelist
+
+[[boost::system::system_error][Thrown on failure. ]]
+
+]
+
+
+
+[endsect]
+
+
+[endsect]
+
+
+[section:bytes_readable posix::basic_descriptor::bytes_readable]
+
+
+['Inherited from posix::descriptor_base.]
+
+IO control command to get the amount of data that can be read without blocking.
+
+ typedef implementation_defined bytes_readable;
+
+
+
+Implements the FIONREAD IO control command.
+
+
+[heading Example]
+
+
+
+ boost::asio::posix::stream_descriptor descriptor(io_service);
+ ...
+ boost::asio::descriptor_base::bytes_readable command(true);
+ descriptor.io_control(command);
+ std::size_t bytes_readable = command.get();
+
+
+
+
+
+
+[endsect]
+
+
+[section:cancel posix::basic_descriptor::cancel]
+
+Cancel all asynchronous operations associated with the descriptor.
+
+ void ``[link boost_asio.reference.posix__basic_descriptor.cancel.overload1 cancel]``();
+
+ boost::system::error_code ``[link boost_asio.reference.posix__basic_descriptor.cancel.overload2 cancel]``(
+ boost::system::error_code & ec);
+
+
+[section:overload1 posix::basic_descriptor::cancel (1 of 2 overloads)]
+
+Cancel all asynchronous operations associated with the descriptor.
+
+ void cancel();
+
+
+This function causes all outstanding asynchronous read or write operations to finish immediately, and the handlers for cancelled operations will be passed the boost::asio::error::operation\_aborted error.
+
+
+[heading Exceptions]
+
+
+[variablelist
+
+[[boost::system::system_error][Thrown on failure. ]]
+
+]
+
+
+
+[endsect]
+
+
+
+[section:overload2 posix::basic_descriptor::cancel (2 of 2 overloads)]
+
+Cancel all asynchronous operations associated with the descriptor.
+
+ boost::system::error_code cancel(
+ boost::system::error_code & ec);
+
+
+This function causes all outstanding asynchronous read or write operations to finish immediately, and the handlers for cancelled operations will be passed the boost::asio::error::operation\_aborted error.
+
+
+[heading Parameters]
+
+
+[variablelist
+
+[[ec][Set to indicate what error occurred, if any. ]]
+
+]
+
+
+
+[endsect]
+
+
+[endsect]
+
+[section:close posix::basic_descriptor::close]
+
+Close the descriptor.
+
+ void ``[link boost_asio.reference.posix__basic_descriptor.close.overload1 close]``();
+
+ boost::system::error_code ``[link boost_asio.reference.posix__basic_descriptor.close.overload2 close]``(
+ boost::system::error_code & ec);
+
+
+[section:overload1 posix::basic_descriptor::close (1 of 2 overloads)]
+
+Close the descriptor.
+
+ void close();
+
+
+This function is used to close the descriptor. Any asynchronous read or write operations will be cancelled immediately, and will complete with the boost::asio::error::operation\_aborted error.
+
+
+[heading Exceptions]
+
+
+[variablelist
+
+[[boost::system::system_error][Thrown on failure. ]]
+
+]
+
+
+
+[endsect]
+
+
+
+[section:overload2 posix::basic_descriptor::close (2 of 2 overloads)]
+
+Close the descriptor.
+
+ boost::system::error_code close(
+ boost::system::error_code & ec);
+
+
+This function is used to close the descriptor. Any asynchronous read or write operations will be cancelled immediately, and will complete with the boost::asio::error::operation\_aborted error.
+
+
+[heading Parameters]
+
+
+[variablelist
+
+[[ec][Set to indicate what error occurred, if any. ]]
+
+]
+
+
+
+[endsect]
+
+
+[endsect]
+
+
+[section:get_io_service posix::basic_descriptor::get_io_service]
+
+
+['Inherited from basic_io_object.]
+
+Get the io_service associated with the object.
+
+ boost::asio::io_service & get_io_service();
+
+
+This function may be used to obtain the io_service object that the I/O object uses to dispatch handlers for asynchronous operations.
+
+
+[heading Return Value]
+
+A reference to the io_service object that the I/O object will use to dispatch handlers. Ownership is not transferred to the caller.
+
+
+
+[endsect]
+
+
+
+[section:implementation posix::basic_descriptor::implementation]
+
+
+['Inherited from basic_io_object.]
+
+The underlying implementation of the I/O object.
+
+ implementation_type implementation;
+
+
+
+[endsect]
+
+
+
+[section:implementation_type posix::basic_descriptor::implementation_type]
+
+
+['Inherited from basic_io_object.]
+
+The underlying implementation type of I/O object.
+
+ typedef service_type::implementation_type implementation_type;
+
+
+
+
+[endsect]
+
+
+[section:io_control posix::basic_descriptor::io_control]
+
+Perform an IO control command on the descriptor.
+
+ template<
+ typename ``[link boost_asio.reference.IoControlCommand IoControlCommand]``>
+ void ``[link boost_asio.reference.posix__basic_descriptor.io_control.overload1 io_control]``(
+ IoControlCommand & command);
+
+ template<
+ typename ``[link boost_asio.reference.IoControlCommand IoControlCommand]``>
+ boost::system::error_code ``[link boost_asio.reference.posix__basic_descriptor.io_control.overload2 io_control]``(
+ IoControlCommand & command,
+ boost::system::error_code & ec);
+
+
+[section:overload1 posix::basic_descriptor::io_control (1 of 2 overloads)]
+
+Perform an IO control command on the descriptor.
+
+ template<
+ typename ``[link boost_asio.reference.IoControlCommand IoControlCommand]``>
+ void io_control(
+ IoControlCommand & command);
+
+
+This function is used to execute an IO control command on the descriptor.
+
+
+[heading Parameters]
+
+
+[variablelist
+
+[[command][The IO control command to be performed on the descriptor.]]
+
+]
+
+[heading Exceptions]
+
+
+[variablelist
+
+[[boost::system::system_error][Thrown on failure.]]
+
+]
+
+[heading Example]
+
+Getting the number of bytes ready to read:
+
+ boost::asio::posix::stream_descriptor descriptor(io_service);
+ ...
+ boost::asio::posix::stream_descriptor::bytes_readable command;
+ descriptor.io_control(command);
+ std::size_t bytes_readable = command.get();
+
+
+
+
+
+
+[endsect]
+
+
+
+[section:overload2 posix::basic_descriptor::io_control (2 of 2 overloads)]
+
+Perform an IO control command on the descriptor.
+
+ template<
+ typename ``[link boost_asio.reference.IoControlCommand IoControlCommand]``>
+ boost::system::error_code io_control(
+ IoControlCommand & command,
+ boost::system::error_code & ec);
+
+
+This function is used to execute an IO control command on the descriptor.
+
+
+[heading Parameters]
+
+
+[variablelist
+
+[[command][The IO control command to be performed on the descriptor.]]
+
+[[ec][Set to indicate what error occurred, if any.]]
+
+]
+
+[heading Example]
+
+Getting the number of bytes ready to read:
+
+ boost::asio::posix::stream_descriptor descriptor(io_service);
+ ...
+ boost::asio::posix::stream_descriptor::bytes_readable command;
+ boost::system::error_code ec;
+ descriptor.io_control(command, ec);
+ if (ec)
+ {
+ // An error occurred.
+ }
+ std::size_t bytes_readable = command.get();
+
+
+
+
+
+
+[endsect]
+
+
+[endsect]
+
+
+[section:io_service posix::basic_descriptor::io_service]
+
+
+['Inherited from basic_io_object.]
+
+(Deprecated: use get_io_service().) Get the io_service associated with the object.
+
+ boost::asio::io_service & io_service();
+
+
+This function may be used to obtain the io_service object that the I/O object uses to dispatch handlers for asynchronous operations.
+
+
+[heading Return Value]
+
+A reference to the io_service object that the I/O object will use to dispatch handlers. Ownership is not transferred to the caller.
+
+
+
+[endsect]
+
+
+
+[section:is_open posix::basic_descriptor::is_open]
+
+Determine whether the descriptor is open.
+
+ bool is_open() const;
+
+
+
+[endsect]
+
+
+
+[section:lowest_layer posix::basic_descriptor::lowest_layer]
+
+Get a reference to the lowest layer.
+
+ lowest_layer_type & lowest_layer();
+
+
+This function returns a reference to the lowest layer in a stack of layers. Since a basic_descriptor cannot contain any further layers, it simply returns a reference to itself.
+
+
+[heading Return Value]
+
+A reference to the lowest layer in the stack of layers. Ownership is not transferred to the caller.
+
+
+
+[endsect]
+
+
+
+[section:lowest_layer_type posix::basic_descriptor::lowest_layer_type]
+
+A basic_descriptor is always the lowest layer.
+
+ typedef basic_descriptor< DescriptorService > lowest_layer_type;
+
+
+[heading Types]
+[table
+ [[Name][Description]]
+
+ [
+
+ [[link boost_asio.reference.posix__basic_descriptor.bytes_readable [*bytes_readable]]]
+ [IO control command to get the amount of data that can be read without blocking. ]
+
+ ]
+
+ [
+
+ [[link boost_asio.reference.posix__basic_descriptor.implementation_type [*implementation_type]]]
+ [The underlying implementation type of I/O object. ]
+
+ ]
+
+ [
+
+ [[link boost_asio.reference.posix__basic_descriptor.lowest_layer_type [*lowest_layer_type]]]
+ [A basic_descriptor is always the lowest layer. ]
+
+ ]
+
+ [
+
+ [[link boost_asio.reference.posix__basic_descriptor.native_type [*native_type]]]
+ [The native representation of a descriptor. ]
+
+ ]
+
+ [
+
+ [[link boost_asio.reference.posix__basic_descriptor.non_blocking_io [*non_blocking_io]]]
+ [IO control command to set the blocking mode of the descriptor. ]
+
+ ]
+
+ [
+
+ [[link boost_asio.reference.posix__basic_descriptor.service_type [*service_type]]]
+ [The type of the service that will be used to provide I/O operations. ]
+
+ ]
+
+]
+
+[heading Member Functions]
+[table
+ [[Name][Description]]
+
+ [
+ [[link boost_asio.reference.posix__basic_descriptor.assign [*assign]]]
+ [Assign an existing native descriptor to the descriptor. ]
+ ]
+
+ [
+ [[link boost_asio.reference.posix__basic_descriptor.basic_descriptor [*basic_descriptor]]]
+ [Construct a basic_descriptor without opening it. ]
+ ]
+
+ [
+ [[link boost_asio.reference.posix__basic_descriptor.cancel [*cancel]]]
+ [Cancel all asynchronous operations associated with the descriptor. ]
+ ]
+
+ [
+ [[link boost_asio.reference.posix__basic_descriptor.close [*close]]]
+ [Close the descriptor. ]
+ ]
+
+ [
+ [[link boost_asio.reference.posix__basic_descriptor.get_io_service [*get_io_service]]]
+ [Get the io_service associated with the object. ]
+ ]
+
+ [
+ [[link boost_asio.reference.posix__basic_descriptor.io_control [*io_control]]]
+ [Perform an IO control command on the descriptor. ]
+ ]
+
+ [
+ [[link boost_asio.reference.posix__basic_descriptor.io_service [*io_service]]]
+ [(Deprecated: use get_io_service().) Get the io_service associated with the object. ]
+ ]
+
+ [
+ [[link boost_asio.reference.posix__basic_descriptor.is_open [*is_open]]]
+ [Determine whether the descriptor is open. ]
+ ]
+
+ [
+ [[link boost_asio.reference.posix__basic_descriptor.lowest_layer [*lowest_layer]]]
+ [Get a reference to the lowest layer. ]
+ ]
+
+ [
+ [[link boost_asio.reference.posix__basic_descriptor.native [*native]]]
+ [Get the native descriptor representation. ]
+ ]
+
+]
+
+[heading Protected Member Functions]
+[table
+ [[Name][Description]]
+
+ [
+ [[link boost_asio.reference.posix__basic_descriptor._basic_descriptor [*~basic_descriptor]]]
+ [Protected destructor to prevent deletion through this type. ]
+ ]
+
+]
+
+[heading Protected Data Members]
+[table
+ [[Name][Description]]
+
+ [
+ [[link boost_asio.reference.posix__basic_descriptor.implementation [*implementation]]]
+ [The underlying implementation of the I/O object. ]
+ ]
+
+ [
+ [[link boost_asio.reference.posix__basic_descriptor.service [*service]]]
+ [The service associated with the I/O object. ]
+ ]
+
+]
+
+The posix::basic_descriptor class template provides the ability to wrap a POSIX descriptor.
+
+
+[heading Thread Safety]
+
+[*Distinct] [*objects:] Safe.
+
+[*Shared] [*objects:] Unsafe.
+
+
+
+
+[endsect]
+
+
+
+[section:native posix::basic_descriptor::native]
+
+Get the native descriptor representation.
+
+ native_type native();
+
+
+This function may be used to obtain the underlying representation of the descriptor. This is intended to allow access to native descriptor functionality that is not otherwise provided.
+
+
+[endsect]
+
+
+
+[section:native_type posix::basic_descriptor::native_type]
+
+The native representation of a descriptor.
+
+ typedef DescriptorService::native_type native_type;
+
+
+
+
+[endsect]
+
+
+
+[section:non_blocking_io posix::basic_descriptor::non_blocking_io]
+
+
+['Inherited from posix::descriptor_base.]
+
+IO control command to set the blocking mode of the descriptor.
+
+ typedef implementation_defined non_blocking_io;
+
+
+
+Implements the FIONBIO IO control command.
+
+
+[heading Example]
+
+
+
+ boost::asio::posix::stream_descriptor descriptor(io_service);
+ ...
+ boost::asio::descriptor_base::non_blocking_io command(true);
+ descriptor.io_control(command);
+
+
+
+
+
+
+[endsect]
+
+
+
+[section:service posix::basic_descriptor::service]
+
+
+['Inherited from basic_io_object.]
+
+The service associated with the I/O object.
+
+ service_type & service;
+
+
+
+[endsect]
+
+
+
+[section:service_type posix::basic_descriptor::service_type]
+
+
+['Inherited from basic_io_object.]
+
+The type of the service that will be used to provide I/O operations.
+
+ typedef DescriptorService service_type;
+
+
+
+
+[endsect]
+
+
+
+[section:_basic_descriptor posix::basic_descriptor::~basic_descriptor]
+
+Protected destructor to prevent deletion through this type.
+
+ ~basic_descriptor();
+
+
+
+[endsect]
+
+
+
+[endsect]
+
+[section:posix__basic_stream_descriptor posix::basic_stream_descriptor]
+
+Provides stream-oriented descriptor functionality.
+
+ template<
+ typename ``[link boost_asio.reference.StreamDescriptorService StreamDescriptorService]`` = stream_descriptor_service>
+ class basic_stream_descriptor :
+ public posix::basic_descriptor< StreamDescriptorService >
+
+
+[heading Types]
+[table
+ [[Name][Description]]
+
+ [
+
+ [[link boost_asio.reference.posix__basic_stream_descriptor.bytes_readable [*bytes_readable]]]
+ [IO control command to get the amount of data that can be read without blocking. ]
+
+ ]
+
+ [
+
+ [[link boost_asio.reference.posix__basic_stream_descriptor.implementation_type [*implementation_type]]]
+ [The underlying implementation type of I/O object. ]
+
+ ]
+
+ [
+
+ [[link boost_asio.reference.posix__basic_stream_descriptor.lowest_layer_type [*lowest_layer_type]]]
+ [A basic_descriptor is always the lowest layer. ]
+
+ ]
+
+ [
+
+ [[link boost_asio.reference.posix__basic_stream_descriptor.native_type [*native_type]]]
+ [The native representation of a descriptor. ]
+
+ ]
+
+ [
+
+ [[link boost_asio.reference.posix__basic_stream_descriptor.non_blocking_io [*non_blocking_io]]]
+ [IO control command to set the blocking mode of the descriptor. ]
+
+ ]
+
+ [
+
+ [[link boost_asio.reference.posix__basic_stream_descriptor.service_type [*service_type]]]
+ [The type of the service that will be used to provide I/O operations. ]
+
+ ]
+
+]
+
+[heading Member Functions]
+[table
+ [[Name][Description]]
+
+ [
+ [[link boost_asio.reference.posix__basic_stream_descriptor.assign [*assign]]]
+ [Assign an existing native descriptor to the descriptor. ]
+ ]
+
+ [
+ [[link boost_asio.reference.posix__basic_stream_descriptor.async_read_some [*async_read_some]]]
+ [Start an asynchronous read. ]
+ ]
+
+ [
+ [[link boost_asio.reference.posix__basic_stream_descriptor.async_write_some [*async_write_some]]]
+ [Start an asynchronous write. ]
+ ]
+
+ [
+ [[link boost_asio.reference.posix__basic_stream_descriptor.basic_stream_descriptor [*basic_stream_descriptor]]]
+ [Construct a basic_stream_descriptor without opening it. ]
+ ]
+
+ [
+ [[link boost_asio.reference.posix__basic_stream_descriptor.cancel [*cancel]]]
+ [Cancel all asynchronous operations associated with the descriptor. ]
+ ]
+
+ [
+ [[link boost_asio.reference.posix__basic_stream_descriptor.close [*close]]]
+ [Close the descriptor. ]
+ ]
+
+ [
+ [[link boost_asio.reference.posix__basic_stream_descriptor.get_io_service [*get_io_service]]]
+ [Get the io_service associated with the object. ]
+ ]
+
+ [
+ [[link boost_asio.reference.posix__basic_stream_descriptor.io_control [*io_control]]]
+ [Perform an IO control command on the descriptor. ]
+ ]
+
+ [
+ [[link boost_asio.reference.posix__basic_stream_descriptor.io_service [*io_service]]]
+ [(Deprecated: use get_io_service().) Get the io_service associated with the object. ]
+ ]
+
+ [
+ [[link boost_asio.reference.posix__basic_stream_descriptor.is_open [*is_open]]]
+ [Determine whether the descriptor is open. ]
+ ]
+
+ [
+ [[link boost_asio.reference.posix__basic_stream_descriptor.lowest_layer [*lowest_layer]]]
+ [Get a reference to the lowest layer. ]
+ ]
+
+ [
+ [[link boost_asio.reference.posix__basic_stream_descriptor.native [*native]]]
+ [Get the native descriptor representation. ]
+ ]
+
+ [
+ [[link boost_asio.reference.posix__basic_stream_descriptor.read_some [*read_some]]]
+ [Read some data from the descriptor. ]
+ ]
+
+ [
+ [[link boost_asio.reference.posix__basic_stream_descriptor.write_some [*write_some]]]
+ [Write some data to the descriptor. ]
+ ]
+
+]
+
+[heading Protected Data Members]
+[table
+ [[Name][Description]]
+
+ [
+ [[link boost_asio.reference.posix__basic_stream_descriptor.implementation [*implementation]]]
+ [The underlying implementation of the I/O object. ]
+ ]
+
+ [
+ [[link boost_asio.reference.posix__basic_stream_descriptor.service [*service]]]
+ [The service associated with the I/O object. ]
+ ]
+
+]
+
+The posix::basic_stream_descriptor class template provides asynchronous and blocking stream-oriented descriptor functionality.
+
+
+[heading Thread Safety]
+
+[*Distinct] [*objects:] Safe.
+
+[*Shared] [*objects:] Unsafe.
+
+
+[section:assign posix::basic_stream_descriptor::assign]
+
+Assign an existing native descriptor to the descriptor.
+
+ void ``[link boost_asio.reference.posix__basic_stream_descriptor.assign.overload1 assign]``(
+ const native_type & native_descriptor);
+
+ boost::system::error_code ``[link boost_asio.reference.posix__basic_stream_descriptor.assign.overload2 assign]``(
+ const native_type & native_descriptor,
+ boost::system::error_code & ec);
+
+
+[section:overload1 posix::basic_stream_descriptor::assign (1 of 2 overloads)]
+
+
+['Inherited from posix::basic_descriptor.]
+
+Assign an existing native descriptor to the descriptor.
+
+ void assign(
+ const native_type & native_descriptor);
+
+
+
+[endsect]
+
+
+
+[section:overload2 posix::basic_stream_descriptor::assign (2 of 2 overloads)]
+
+
+['Inherited from posix::basic_descriptor.]
+
+Assign an existing native descriptor to the descriptor.
+
+ boost::system::error_code assign(
+ const native_type & native_descriptor,
+ boost::system::error_code & ec);
+
+
+
+[endsect]
+
+
+[endsect]
+
+
+[section:async_read_some posix::basic_stream_descriptor::async_read_some]
+
+Start an asynchronous read.
+
+ template<
+ typename ``[link boost_asio.reference.MutableBufferSequence MutableBufferSequence]``,
+ typename ``[link boost_asio.reference.ReadHandler ReadHandler]``>
+ void async_read_some(
+ const MutableBufferSequence & buffers,
+ ReadHandler handler);
+
+
+This function is used to asynchronously read data from the stream descriptor. The function call always returns immediately.
+
+
+[heading Parameters]
+
+
+[variablelist
+
+[[buffers][One or more buffers into which the data will be read. Although the buffers object may be copied as necessary, ownership of the underlying memory blocks is retained by the caller, which must guarantee that they remain valid until the handler is called.]]
+
+[[handler][The handler to be called when the read operation completes. Copies will be made of the handler as required. The function signature of the handler must be:
+``
+ void handler(
+ const boost::system::error_code& error, // Result of operation.
+ std::size_t bytes_transferred // Number of bytes read.
+ );
+
+``
+Regardless of whether the asynchronous operation completes immediately or not, the handler will not be invoked from within this function. Invocation of the handler will be performed in a manner equivalent to using boost::asio::io\_service::post().]]
+
+]
+
+[heading Remarks]
+
+The read operation may not read all of the requested number of bytes. Consider using the
+[link boost_asio.reference.async_read async_read] function if you need to ensure that the requested amount of data is read before the asynchronous operation completes.
+
+[heading Example]
+
+To read into a single data buffer use the
+[link boost_asio.reference.buffer buffer] function as follows:
+
+ descriptor.async_read_some(boost::asio::buffer(data, size), handler);
+
+
+See the
+[link boost_asio.reference.buffer buffer] documentation for information on reading into multiple buffers in one go, and how to use it with arrays, boost::array or std::vector.
+
+
+
+[endsect]
+
+
+
+[section:async_write_some posix::basic_stream_descriptor::async_write_some]
+
+Start an asynchronous write.
+
+ template<
+ typename ``[link boost_asio.reference.ConstBufferSequence ConstBufferSequence]``,
+ typename ``[link boost_asio.reference.WriteHandler WriteHandler]``>
+ void async_write_some(
+ const ConstBufferSequence & buffers,
+ WriteHandler handler);
+
+
+This function is used to asynchronously write data to the stream descriptor. The function call always returns immediately.
+
+
+[heading Parameters]
+
+
+[variablelist
+
+[[buffers][One or more data buffers to be written to the descriptor. Although the buffers object may be copied as necessary, ownership of the underlying memory blocks is retained by the caller, which must guarantee that they remain valid until the handler is called.]]
+
+[[handler][The handler to be called when the write operation completes. Copies will be made of the handler as required. The function signature of the handler must be:
+``
+ void handler(
+ const boost::system::error_code& error, // Result of operation.
+ std::size_t bytes_transferred // Number of bytes written.
+ );
+
+``
+Regardless of whether the asynchronous operation completes immediately or not, the handler will not be invoked from within this function. Invocation of the handler will be performed in a manner equivalent to using boost::asio::io\_service::post().]]
+
+]
+
+[heading Remarks]
+
+The write operation may not transmit all of the data to the peer. Consider using the
+[link boost_asio.reference.async_write async_write] function if you need to ensure that all data is written before the asynchronous operation completes.
+
+[heading Example]
+
+To write a single data buffer use the
+[link boost_asio.reference.buffer buffer] function as follows:
+
+ descriptor.async_write_some(boost::asio::buffer(data, size), handler);
+
+
+See the
+[link boost_asio.reference.buffer buffer] documentation for information on writing multiple buffers in one go, and how to use it with arrays, boost::array or std::vector.
+
+
+
+[endsect]
+
+
+[section:basic_stream_descriptor posix::basic_stream_descriptor::basic_stream_descriptor]
+
+Construct a basic_stream_descriptor without opening it.
+
+ ``[link boost_asio.reference.posix__basic_stream_descriptor.basic_stream_descriptor.overload1 basic_stream_descriptor]``(
+ boost::asio::io_service & io_service);
+
+ ``[link boost_asio.reference.posix__basic_stream_descriptor.basic_stream_descriptor.overload2 basic_stream_descriptor]``(
+ boost::asio::io_service & io_service,
+ const native_type & native_descriptor);
+
+
+[section:overload1 posix::basic_stream_descriptor::basic_stream_descriptor (1 of 2 overloads)]
+
+Construct a basic_stream_descriptor without opening it.
+
+ basic_stream_descriptor(
+ boost::asio::io_service & io_service);
+
+
+This constructor creates a stream descriptor without opening it. The descriptor needs to be opened and then connected or accepted before data can be sent or received on it.
+
+
+[heading Parameters]
+
+
+[variablelist
+
+[[io_service][The io\_service object that the stream descriptor will use to dispatch handlers for any asynchronous operations performed on the descriptor. ]]
+
+]
+
+
+
+[endsect]
+
+
+
+[section:overload2 posix::basic_stream_descriptor::basic_stream_descriptor (2 of 2 overloads)]
+
+Construct a basic_stream_descriptor on an existing native descriptor.
+
+ basic_stream_descriptor(
+ boost::asio::io_service & io_service,
+ const native_type & native_descriptor);
+
+
+This constructor creates a stream descriptor object to hold an existing native descriptor.
+
+
+[heading Parameters]
+
+
+[variablelist
+
+[[io_service][The io\_service object that the stream descriptor will use to dispatch handlers for any asynchronous operations performed on the descriptor.]]
+
+[[native_descriptor][The new underlying descriptor implementation.]]
+
+]
+
+[heading Exceptions]
+
+
+[variablelist
+
+[[boost::system::system_error][Thrown on failure. ]]
+
+]
+
+
+
+[endsect]
+
+
+[endsect]
+
+
+[section:bytes_readable posix::basic_stream_descriptor::bytes_readable]
+
+
+['Inherited from posix::descriptor_base.]
+
+IO control command to get the amount of data that can be read without blocking.
+
+ typedef implementation_defined bytes_readable;
+
+
+
+Implements the FIONREAD IO control command.
+
+
+[heading Example]
+
+
+
+ boost::asio::posix::stream_descriptor descriptor(io_service);
+ ...
+ boost::asio::descriptor_base::bytes_readable command(true);
+ descriptor.io_control(command);
+ std::size_t bytes_readable = command.get();
+
+
+
+
+
+
+[endsect]
+
+
+[section:cancel posix::basic_stream_descriptor::cancel]
+
+Cancel all asynchronous operations associated with the descriptor.
+
+ void ``[link boost_asio.reference.posix__basic_stream_descriptor.cancel.overload1 cancel]``();
+
+ boost::system::error_code ``[link boost_asio.reference.posix__basic_stream_descriptor.cancel.overload2 cancel]``(
+ boost::system::error_code & ec);
+
+
+[section:overload1 posix::basic_stream_descriptor::cancel (1 of 2 overloads)]
+
+
+['Inherited from posix::basic_descriptor.]
+
+Cancel all asynchronous operations associated with the descriptor.
+
+ void cancel();
+
+
+This function causes all outstanding asynchronous read or write operations to finish immediately, and the handlers for cancelled operations will be passed the boost::asio::error::operation\_aborted error.
+
+
+[heading Exceptions]
+
+
+[variablelist
+
+[[boost::system::system_error][Thrown on failure. ]]
+
+]
+
+
+
+[endsect]
+
+
+
+[section:overload2 posix::basic_stream_descriptor::cancel (2 of 2 overloads)]
+
+
+['Inherited from posix::basic_descriptor.]
+
+Cancel all asynchronous operations associated with the descriptor.
+
+ boost::system::error_code cancel(
+ boost::system::error_code & ec);
+
+
+This function causes all outstanding asynchronous read or write operations to finish immediately, and the handlers for cancelled operations will be passed the boost::asio::error::operation\_aborted error.
+
+
+[heading Parameters]
+
+
+[variablelist
+
+[[ec][Set to indicate what error occurred, if any. ]]
+
+]
+
+
+
+[endsect]
+
+
+[endsect]
+
+[section:close posix::basic_stream_descriptor::close]
+
+Close the descriptor.
+
+ void ``[link boost_asio.reference.posix__basic_stream_descriptor.close.overload1 close]``();
+
+ boost::system::error_code ``[link boost_asio.reference.posix__basic_stream_descriptor.close.overload2 close]``(
+ boost::system::error_code & ec);
+
+
+[section:overload1 posix::basic_stream_descriptor::close (1 of 2 overloads)]
+
+
+['Inherited from posix::basic_descriptor.]
+
+Close the descriptor.
+
+ void close();
+
+
+This function is used to close the descriptor. Any asynchronous read or write operations will be cancelled immediately, and will complete with the boost::asio::error::operation\_aborted error.
+
+
+[heading Exceptions]
+
+
+[variablelist
+
+[[boost::system::system_error][Thrown on failure. ]]
+
+]
+
+
+
+[endsect]
+
+
+
+[section:overload2 posix::basic_stream_descriptor::close (2 of 2 overloads)]
+
+
+['Inherited from posix::basic_descriptor.]
+
+Close the descriptor.
+
+ boost::system::error_code close(
+ boost::system::error_code & ec);
+
+
+This function is used to close the descriptor. Any asynchronous read or write operations will be cancelled immediately, and will complete with the boost::asio::error::operation\_aborted error.
+
+
+[heading Parameters]
+
+
+[variablelist
+
+[[ec][Set to indicate what error occurred, if any. ]]
+
+]
+
+
+
+[endsect]
+
+
+[endsect]
+
+
+[section:get_io_service posix::basic_stream_descriptor::get_io_service]
+
+
+['Inherited from basic_io_object.]
+
+Get the io_service associated with the object.
+
+ boost::asio::io_service & get_io_service();
+
+
+This function may be used to obtain the io_service object that the I/O object uses to dispatch handlers for asynchronous operations.
+
+
+[heading Return Value]
+
+A reference to the io_service object that the I/O object will use to dispatch handlers. Ownership is not transferred to the caller.
+
+
+
+[endsect]
+
+
+
+[section:implementation posix::basic_stream_descriptor::implementation]
+
+
+['Inherited from basic_io_object.]
+
+The underlying implementation of the I/O object.
+
+ implementation_type implementation;
+
+
+
+[endsect]
+
+
+
+[section:implementation_type posix::basic_stream_descriptor::implementation_type]
+
+
+['Inherited from basic_io_object.]
+
+The underlying implementation type of I/O object.
+
+ typedef service_type::implementation_type implementation_type;
+
+
+
+
+[endsect]
+
+
+[section:io_control posix::basic_stream_descriptor::io_control]
+
+Perform an IO control command on the descriptor.
+
+ void ``[link boost_asio.reference.posix__basic_stream_descriptor.io_control.overload1 io_control]``(
+ IoControlCommand & command);
+
+ boost::system::error_code ``[link boost_asio.reference.posix__basic_stream_descriptor.io_control.overload2 io_control]``(
+ IoControlCommand & command,
+ boost::system::error_code & ec);
+
+
+[section:overload1 posix::basic_stream_descriptor::io_control (1 of 2 overloads)]
+
+
+['Inherited from posix::basic_descriptor.]
+
+Perform an IO control command on the descriptor.
+
+ void io_control(
+ IoControlCommand & command);
+
+
+This function is used to execute an IO control command on the descriptor.
+
+
+[heading Parameters]
+
+
+[variablelist
+
+[[command][The IO control command to be performed on the descriptor.]]
+
+]
+
+[heading Exceptions]
+
+
+[variablelist
+
+[[boost::system::system_error][Thrown on failure.]]
+
+]
+
+[heading Example]
+
+Getting the number of bytes ready to read:
+
+ boost::asio::posix::stream_descriptor descriptor(io_service);
+ ...
+ boost::asio::posix::stream_descriptor::bytes_readable command;
+ descriptor.io_control(command);
+ std::size_t bytes_readable = command.get();
+
+
+
+
+
+
+[endsect]
+
+
+
+[section:overload2 posix::basic_stream_descriptor::io_control (2 of 2 overloads)]
+
+
+['Inherited from posix::basic_descriptor.]
+
+Perform an IO control command on the descriptor.
+
+ boost::system::error_code io_control(
+ IoControlCommand & command,
+ boost::system::error_code & ec);
+
+
+This function is used to execute an IO control command on the descriptor.
+
+
+[heading Parameters]
+
+
+[variablelist
+
+[[command][The IO control command to be performed on the descriptor.]]
+
+[[ec][Set to indicate what error occurred, if any.]]
+
+]
+
+[heading Example]
+
+Getting the number of bytes ready to read:
+
+ boost::asio::posix::stream_descriptor descriptor(io_service);
+ ...
+ boost::asio::posix::stream_descriptor::bytes_readable command;
+ boost::system::error_code ec;
+ descriptor.io_control(command, ec);
+ if (ec)
+ {
+ // An error occurred.
+ }
+ std::size_t bytes_readable = command.get();
+
+
+
+
+
+
+[endsect]
+
+
+[endsect]
+
+
+[section:io_service posix::basic_stream_descriptor::io_service]
+
+
+['Inherited from basic_io_object.]
+
+(Deprecated: use get_io_service().) Get the io_service associated with the object.
+
+ boost::asio::io_service & io_service();
+
+
+This function may be used to obtain the io_service object that the I/O object uses to dispatch handlers for asynchronous operations.
+
+
+[heading Return Value]
+
+A reference to the io_service object that the I/O object will use to dispatch handlers. Ownership is not transferred to the caller.
+
+
+
+[endsect]
+
+
+
+[section:is_open posix::basic_stream_descriptor::is_open]
+
+
+['Inherited from posix::basic_descriptor.]
+
+Determine whether the descriptor is open.
+
+ bool is_open() const;
+
+
+
+[endsect]
+
+
+
+[section:lowest_layer posix::basic_stream_descriptor::lowest_layer]
+
+
+['Inherited from posix::basic_descriptor.]
+
+Get a reference to the lowest layer.
+
+ lowest_layer_type & lowest_layer();
+
+
+This function returns a reference to the lowest layer in a stack of layers. Since a basic_descriptor cannot contain any further layers, it simply returns a reference to itself.
+
+
+[heading Return Value]
+
+A reference to the lowest layer in the stack of layers. Ownership is not transferred to the caller.
+
+
+
+[endsect]
+
+
+
+[section:lowest_layer_type posix::basic_stream_descriptor::lowest_layer_type]
+
+
+['Inherited from posix::basic_descriptor.]
+
+A basic_descriptor is always the lowest layer.
+
+ typedef basic_descriptor< StreamDescriptorService > lowest_layer_type;
+
+
+[heading Types]
+[table
+ [[Name][Description]]
+
+ [
+
+ [[link boost_asio.reference.posix__basic_descriptor.bytes_readable [*bytes_readable]]]
+ [IO control command to get the amount of data that can be read without blocking. ]
+
+ ]
+
+ [
+
+ [[link boost_asio.reference.posix__basic_descriptor.implementation_type [*implementation_type]]]
+ [The underlying implementation type of I/O object. ]
+
+ ]
+
+ [
+
+ [[link boost_asio.reference.posix__basic_descriptor.lowest_layer_type [*lowest_layer_type]]]
+ [A basic_descriptor is always the lowest layer. ]
+
+ ]
+
+ [
+
+ [[link boost_asio.reference.posix__basic_descriptor.native_type [*native_type]]]
+ [The native representation of a descriptor. ]
+
+ ]
+
+ [
+
+ [[link boost_asio.reference.posix__basic_descriptor.non_blocking_io [*non_blocking_io]]]
+ [IO control command to set the blocking mode of the descriptor. ]
+
+ ]
+
+ [
+
+ [[link boost_asio.reference.posix__basic_descriptor.service_type [*service_type]]]
+ [The type of the service that will be used to provide I/O operations. ]
+
+ ]
+
+]
+
+[heading Member Functions]
+[table
+ [[Name][Description]]
+
+ [
+ [[link boost_asio.reference.posix__basic_descriptor.assign [*assign]]]
+ [Assign an existing native descriptor to the descriptor. ]
+ ]
+
+ [
+ [[link boost_asio.reference.posix__basic_descriptor.basic_descriptor [*basic_descriptor]]]
+ [Construct a basic_descriptor without opening it. ]
+ ]
+
+ [
+ [[link boost_asio.reference.posix__basic_descriptor.cancel [*cancel]]]
+ [Cancel all asynchronous operations associated with the descriptor. ]
+ ]
+
+ [
+ [[link boost_asio.reference.posix__basic_descriptor.close [*close]]]
+ [Close the descriptor. ]
+ ]
+
+ [
+ [[link boost_asio.reference.posix__basic_descriptor.get_io_service [*get_io_service]]]
+ [Get the io_service associated with the object. ]
+ ]
+
+ [
+ [[link boost_asio.reference.posix__basic_descriptor.io_control [*io_control]]]
+ [Perform an IO control command on the descriptor. ]
+ ]
+
+ [
+ [[link boost_asio.reference.posix__basic_descriptor.io_service [*io_service]]]
+ [(Deprecated: use get_io_service().) Get the io_service associated with the object. ]
+ ]
+
+ [
+ [[link boost_asio.reference.posix__basic_descriptor.is_open [*is_open]]]
+ [Determine whether the descriptor is open. ]
+ ]
+
+ [
+ [[link boost_asio.reference.posix__basic_descriptor.lowest_layer [*lowest_layer]]]
+ [Get a reference to the lowest layer. ]
+ ]
+
+ [
+ [[link boost_asio.reference.posix__basic_descriptor.native [*native]]]
+ [Get the native descriptor representation. ]
+ ]
+
+]
+
+[heading Protected Member Functions]
+[table
+ [[Name][Description]]
+
+ [
+ [[link boost_asio.reference.posix__basic_descriptor._basic_descriptor [*~basic_descriptor]]]
+ [Protected destructor to prevent deletion through this type. ]
+ ]
+
+]
+
+[heading Protected Data Members]
+[table
+ [[Name][Description]]
+
+ [
+ [[link boost_asio.reference.posix__basic_descriptor.implementation [*implementation]]]
+ [The underlying implementation of the I/O object. ]
+ ]
+
+ [
+ [[link boost_asio.reference.posix__basic_descriptor.service [*service]]]
+ [The service associated with the I/O object. ]
+ ]
+
+]
+
+The posix::basic_descriptor class template provides the ability to wrap a POSIX descriptor.
+
+
+[heading Thread Safety]
+
+[*Distinct] [*objects:] Safe.
+
+[*Shared] [*objects:] Unsafe.
+
+
+
+
+[endsect]
+
+
+
+[section:native posix::basic_stream_descriptor::native]
+
+
+['Inherited from posix::basic_descriptor.]
+
+Get the native descriptor representation.
+
+ native_type native();
+
+
+This function may be used to obtain the underlying representation of the descriptor. This is intended to allow access to native descriptor functionality that is not otherwise provided.
+
+
+[endsect]
+
+
+
+[section:native_type posix::basic_stream_descriptor::native_type]
+
+The native representation of a descriptor.
+
+ typedef StreamDescriptorService::native_type native_type;
+
+
+
+
+[endsect]
+
+
+
+[section:non_blocking_io posix::basic_stream_descriptor::non_blocking_io]
+
+
+['Inherited from posix::descriptor_base.]
+
+IO control command to set the blocking mode of the descriptor.
+
+ typedef implementation_defined non_blocking_io;
+
+
+
+Implements the FIONBIO IO control command.
+
+
+[heading Example]
+
+
+
+ boost::asio::posix::stream_descriptor descriptor(io_service);
+ ...
+ boost::asio::descriptor_base::non_blocking_io command(true);
+ descriptor.io_control(command);
+
+
+
+
+
+
+[endsect]
+
+
+[section:read_some posix::basic_stream_descriptor::read_some]
+
+Read some data from the descriptor.
+
+ template<
+ typename ``[link boost_asio.reference.MutableBufferSequence MutableBufferSequence]``>
+ std::size_t ``[link boost_asio.reference.posix__basic_stream_descriptor.read_some.overload1 read_some]``(
+ const MutableBufferSequence & buffers);
+
+ template<
+ typename ``[link boost_asio.reference.MutableBufferSequence MutableBufferSequence]``>
+ std::size_t ``[link boost_asio.reference.posix__basic_stream_descriptor.read_some.overload2 read_some]``(
+ const MutableBufferSequence & buffers,
+ boost::system::error_code & ec);
+
+
+[section:overload1 posix::basic_stream_descriptor::read_some (1 of 2 overloads)]
+
+Read some data from the descriptor.
+
+ template<
+ typename ``[link boost_asio.reference.MutableBufferSequence MutableBufferSequence]``>
+ std::size_t read_some(
+ const MutableBufferSequence & buffers);
+
+
+This function is used to read data from the stream descriptor. The function call will block until one or more bytes of data has been read successfully, or until an error occurs.
+
+
+[heading Parameters]
+
+
+[variablelist
+
+[[buffers][One or more buffers into which the data will be read.]]
+
+]
+
+[heading Return Value]
+
+The number of bytes read.
+
+[heading Exceptions]
+
+
+[variablelist
+
+[[boost::system::system_error][Thrown on failure. An error code of boost::asio::error::eof indicates that the connection was closed by the peer.]]
+
+]
+
+[heading Remarks]
+
+The read\_some operation may not read all of the requested number of bytes. Consider using the
+[link boost_asio.reference.read read] function if you need to ensure that the requested amount of data is read before the blocking operation completes.
+
+[heading Example]
+
+To read into a single data buffer use the
+[link boost_asio.reference.buffer buffer] function as follows:
+
+ descriptor.read_some(boost::asio::buffer(data, size));
+
+
+See the
+[link boost_asio.reference.buffer buffer] documentation for information on reading into multiple buffers in one go, and how to use it with arrays, boost::array or std::vector.
+
+
+
+[endsect]
+
+
+
+[section:overload2 posix::basic_stream_descriptor::read_some (2 of 2 overloads)]
+
+Read some data from the descriptor.
+
+ template<
+ typename ``[link boost_asio.reference.MutableBufferSequence MutableBufferSequence]``>
+ std::size_t read_some(
+ const MutableBufferSequence & buffers,
+ boost::system::error_code & ec);
+
+
+This function is used to read data from the stream descriptor. The function call will block until one or more bytes of data has been read successfully, or until an error occurs.
+
+
+[heading Parameters]
+
+
+[variablelist
+
+[[buffers][One or more buffers into which the data will be read.]]
+
+[[ec][Set to indicate what error occurred, if any.]]
+
+]
+
+[heading Return Value]
+
+The number of bytes read. Returns 0 if an error occurred.
+
+[heading Remarks]
+
+The read\_some operation may not read all of the requested number of bytes. Consider using the
+[link boost_asio.reference.read read] function if you need to ensure that the requested amount of data is read before the blocking operation completes.
+
+
+
+[endsect]
+
+
+[endsect]
+
+
+[section:service posix::basic_stream_descriptor::service]
+
+
+['Inherited from basic_io_object.]
+
+The service associated with the I/O object.
+
+ service_type & service;
+
+
+
+[endsect]
+
+
+
+[section:service_type posix::basic_stream_descriptor::service_type]
+
+
+['Inherited from basic_io_object.]
+
+The type of the service that will be used to provide I/O operations.
+
+ typedef StreamDescriptorService service_type;
+
+
+
+
+[endsect]
+
+
+[section:write_some posix::basic_stream_descriptor::write_some]
+
+Write some data to the descriptor.
+
+ template<
+ typename ``[link boost_asio.reference.ConstBufferSequence ConstBufferSequence]``>
+ std::size_t ``[link boost_asio.reference.posix__basic_stream_descriptor.write_some.overload1 write_some]``(
+ const ConstBufferSequence & buffers);
+
+ template<
+ typename ``[link boost_asio.reference.ConstBufferSequence ConstBufferSequence]``>
+ std::size_t ``[link boost_asio.reference.posix__basic_stream_descriptor.write_some.overload2 write_some]``(
+ const ConstBufferSequence & buffers,
+ boost::system::error_code & ec);
+
+
+[section:overload1 posix::basic_stream_descriptor::write_some (1 of 2 overloads)]
+
+Write some data to the descriptor.
+
+ template<
+ typename ``[link boost_asio.reference.ConstBufferSequence ConstBufferSequence]``>
+ std::size_t write_some(
+ const ConstBufferSequence & buffers);
+
+
+This function is used to write data to the stream descriptor. The function call will block until one or more bytes of the data has been written successfully, or until an error occurs.
+
+
+[heading Parameters]
+
+
+[variablelist
+
+[[buffers][One or more data buffers to be written to the descriptor.]]
+
+]
+
+[heading Return Value]
+
+The number of bytes written.
+
+[heading Exceptions]
+
+
+[variablelist
+
+[[boost::system::system_error][Thrown on failure. An error code of boost::asio::error::eof indicates that the connection was closed by the peer.]]
+
+]
+
+[heading Remarks]
+
+The write\_some operation may not transmit all of the data to the peer. Consider using the
+[link boost_asio.reference.write write] function if you need to ensure that all data is written before the blocking operation completes.
+
+[heading Example]
+
+To write a single data buffer use the
+[link boost_asio.reference.buffer buffer] function as follows:
+
+ descriptor.write_some(boost::asio::buffer(data, size));
+
+
+See the
+[link boost_asio.reference.buffer buffer] documentation for information on writing multiple buffers in one go, and how to use it with arrays, boost::array or std::vector.
+
+
+
+[endsect]
+
+
+
+[section:overload2 posix::basic_stream_descriptor::write_some (2 of 2 overloads)]
+
+Write some data to the descriptor.
+
+ template<
+ typename ``[link boost_asio.reference.ConstBufferSequence ConstBufferSequence]``>
+ std::size_t write_some(
+ const ConstBufferSequence & buffers,
+ boost::system::error_code & ec);
+
+
+This function is used to write data to the stream descriptor. The function call will block until one or more bytes of the data has been written successfully, or until an error occurs.
+
+
+[heading Parameters]
+
+
+[variablelist
+
+[[buffers][One or more data buffers to be written to the descriptor.]]
+
+[[ec][Set to indicate what error occurred, if any.]]
+
+]
+
+[heading Return Value]
+
+The number of bytes written. Returns 0 if an error occurred.
+
+[heading Remarks]
+
+The write\_some operation may not transmit all of the data to the peer. Consider using the
+[link boost_asio.reference.write write] function if you need to ensure that all data is written before the blocking operation completes.
+
+
+
+[endsect]
+
+
+[endsect]
+
+
+[endsect]
+
+[section:posix__descriptor_base posix::descriptor_base]
+
+The descriptor_base class is used as a base for the basic_stream_descriptor class template so that we have a common place to define the associated IO control commands.
+
+ class descriptor_base
+
+
+[heading Types]
+[table
+ [[Name][Description]]
+
+ [
+
+ [[link boost_asio.reference.posix__descriptor_base.bytes_readable [*bytes_readable]]]
+ [IO control command to get the amount of data that can be read without blocking. ]
+
+ ]
+
+ [
+
+ [[link boost_asio.reference.posix__descriptor_base.non_blocking_io [*non_blocking_io]]]
+ [IO control command to set the blocking mode of the descriptor. ]
+
+ ]
+
+]
+
+[heading Protected Member Functions]
+[table
+ [[Name][Description]]
+
+ [
+ [[link boost_asio.reference.posix__descriptor_base._descriptor_base [*~descriptor_base]]]
+ [Protected destructor to prevent deletion through this type. ]
+ ]
+
+]
+
+
+[section:bytes_readable posix::descriptor_base::bytes_readable]
+
+IO control command to get the amount of data that can be read without blocking.
+
+ typedef implementation_defined bytes_readable;
+
+
+
+Implements the FIONREAD IO control command.
+
+
+[heading Example]
+
+
+
+ boost::asio::posix::stream_descriptor descriptor(io_service);
+ ...
+ boost::asio::descriptor_base::bytes_readable command(true);
+ descriptor.io_control(command);
+ std::size_t bytes_readable = command.get();
+
+
+
+
+
+
+[endsect]
+
+
+
+[section:non_blocking_io posix::descriptor_base::non_blocking_io]
+
+IO control command to set the blocking mode of the descriptor.
+
+ typedef implementation_defined non_blocking_io;
+
+
+
+Implements the FIONBIO IO control command.
+
+
+[heading Example]
+
+
+
+ boost::asio::posix::stream_descriptor descriptor(io_service);
+ ...
+ boost::asio::descriptor_base::non_blocking_io command(true);
+ descriptor.io_control(command);
+
+
+
+
+
+
+[endsect]
+
+
+
+[section:_descriptor_base posix::descriptor_base::~descriptor_base]
+
+Protected destructor to prevent deletion through this type.
+
+ ~descriptor_base();
+
+
+
+[endsect]
+
+
+
+[endsect]
+
+
+[section:posix__stream_descriptor posix::stream_descriptor]
+
+Typedef for the typical usage of a stream-oriented descriptor.
+
+ typedef basic_stream_descriptor stream_descriptor;
+
+
+[heading Types]
+[table
+ [[Name][Description]]
+
+ [
+
+ [[link boost_asio.reference.posix__basic_stream_descriptor.bytes_readable [*bytes_readable]]]
+ [IO control command to get the amount of data that can be read without blocking. ]
+
+ ]
+
+ [
+
+ [[link boost_asio.reference.posix__basic_stream_descriptor.implementation_type [*implementation_type]]]
+ [The underlying implementation type of I/O object. ]
+
+ ]
+
+ [
+
+ [[link boost_asio.reference.posix__basic_stream_descriptor.lowest_layer_type [*lowest_layer_type]]]
+ [A basic_descriptor is always the lowest layer. ]
+
+ ]
+
+ [
+
+ [[link boost_asio.reference.posix__basic_stream_descriptor.native_type [*native_type]]]
+ [The native representation of a descriptor. ]
+
+ ]
+
+ [
+
+ [[link boost_asio.reference.posix__basic_stream_descriptor.non_blocking_io [*non_blocking_io]]]
+ [IO control command to set the blocking mode of the descriptor. ]
+
+ ]
+
+ [
+
+ [[link boost_asio.reference.posix__basic_stream_descriptor.service_type [*service_type]]]
+ [The type of the service that will be used to provide I/O operations. ]
+
+ ]
+
+]
+
+[heading Member Functions]
+[table
+ [[Name][Description]]
+
+ [
+ [[link boost_asio.reference.posix__basic_stream_descriptor.assign [*assign]]]
+ [Assign an existing native descriptor to the descriptor. ]
+ ]
+
+ [
+ [[link boost_asio.reference.posix__basic_stream_descriptor.async_read_some [*async_read_some]]]
+ [Start an asynchronous read. ]
+ ]
+
+ [
+ [[link boost_asio.reference.posix__basic_stream_descriptor.async_write_some [*async_write_some]]]
+ [Start an asynchronous write. ]
+ ]
+
+ [
+ [[link boost_asio.reference.posix__basic_stream_descriptor.basic_stream_descriptor [*basic_stream_descriptor]]]
+ [Construct a basic_stream_descriptor without opening it. ]
+ ]
+
+ [
+ [[link boost_asio.reference.posix__basic_stream_descriptor.cancel [*cancel]]]
+ [Cancel all asynchronous operations associated with the descriptor. ]
+ ]
+
+ [
+ [[link boost_asio.reference.posix__basic_stream_descriptor.close [*close]]]
+ [Close the descriptor. ]
+ ]
+
+ [
+ [[link boost_asio.reference.posix__basic_stream_descriptor.get_io_service [*get_io_service]]]
+ [Get the io_service associated with the object. ]
+ ]
+
+ [
+ [[link boost_asio.reference.posix__basic_stream_descriptor.io_control [*io_control]]]
+ [Perform an IO control command on the descriptor. ]
+ ]
+
+ [
+ [[link boost_asio.reference.posix__basic_stream_descriptor.io_service [*io_service]]]
+ [(Deprecated: use get_io_service().) Get the io_service associated with the object. ]
+ ]
+
+ [
+ [[link boost_asio.reference.posix__basic_stream_descriptor.is_open [*is_open]]]
+ [Determine whether the descriptor is open. ]
+ ]
+
+ [
+ [[link boost_asio.reference.posix__basic_stream_descriptor.lowest_layer [*lowest_layer]]]
+ [Get a reference to the lowest layer. ]
+ ]
+
+ [
+ [[link boost_asio.reference.posix__basic_stream_descriptor.native [*native]]]
+ [Get the native descriptor representation. ]
+ ]
+
+ [
+ [[link boost_asio.reference.posix__basic_stream_descriptor.read_some [*read_some]]]
+ [Read some data from the descriptor. ]
+ ]
+
+ [
+ [[link boost_asio.reference.posix__basic_stream_descriptor.write_some [*write_some]]]
+ [Write some data to the descriptor. ]
+ ]
+
+]
+
+[heading Protected Data Members]
+[table
+ [[Name][Description]]
+
+ [
+ [[link boost_asio.reference.posix__basic_stream_descriptor.implementation [*implementation]]]
+ [The underlying implementation of the I/O object. ]
+ ]
+
+ [
+ [[link boost_asio.reference.posix__basic_stream_descriptor.service [*service]]]
+ [The service associated with the I/O object. ]
+ ]
+
+]
+
+The posix::basic_stream_descriptor class template provides asynchronous and blocking stream-oriented descriptor functionality.
+
+
+[heading Thread Safety]
+
+[*Distinct] [*objects:] Safe.
+
+[*Shared] [*objects:] Unsafe.
+
+
+
+
+[endsect]
+
+
+[section:posix__stream_descriptor_service posix::stream_descriptor_service]
+
+Default service implementation for a stream descriptor.
+
+ class stream_descriptor_service :
+ public io_service::service
+
+
+[heading Types]
+[table
+ [[Name][Description]]
+
+ [
+
+ [[link boost_asio.reference.posix__stream_descriptor_service.implementation_type [*implementation_type]]]
+ [The type of a stream descriptor implementation. ]
+
+ ]
+
+ [
+
+ [[link boost_asio.reference.posix__stream_descriptor_service.native_type [*native_type]]]
+ [The native descriptor type. ]
+
+ ]
+
+]
+
+[heading Member Functions]
+[table
+ [[Name][Description]]
+
+ [
+ [[link boost_asio.reference.posix__stream_descriptor_service.assign [*assign]]]
+ [Assign an existing native descriptor to a stream descriptor. ]
+ ]
+
+ [
+ [[link boost_asio.reference.posix__stream_descriptor_service.async_read_some [*async_read_some]]]
+ [Start an asynchronous read. ]
+ ]
+
+ [
+ [[link boost_asio.reference.posix__stream_descriptor_service.async_write_some [*async_write_some]]]
+ [Start an asynchronous write. ]
+ ]
+
+ [
+ [[link boost_asio.reference.posix__stream_descriptor_service.cancel [*cancel]]]
+ [Cancel all asynchronous operations associated with the descriptor. ]
+ ]
+
+ [
+ [[link boost_asio.reference.posix__stream_descriptor_service.close [*close]]]
+ [Close a stream descriptor implementation. ]
+ ]
+
+ [
+ [[link boost_asio.reference.posix__stream_descriptor_service.construct [*construct]]]
+ [Construct a new stream descriptor implementation. ]
+ ]
+
+ [
+ [[link boost_asio.reference.posix__stream_descriptor_service.destroy [*destroy]]]
+ [Destroy a stream descriptor implementation. ]
+ ]
+
+ [
+ [[link boost_asio.reference.posix__stream_descriptor_service.get_io_service [*get_io_service]]]
+ [Get the io_service object that owns the service. ]
+ ]
+
+ [
+ [[link boost_asio.reference.posix__stream_descriptor_service.io_control [*io_control]]]
+ [Perform an IO control command on the descriptor. ]
+ ]
+
+ [
+ [[link boost_asio.reference.posix__stream_descriptor_service.io_service [*io_service]]]
+ [(Deprecated: use get_io_service().) Get the io_service object that owns the service. ]
+ ]
+
+ [
+ [[link boost_asio.reference.posix__stream_descriptor_service.is_open [*is_open]]]
+ [Determine whether the descriptor is open. ]
+ ]
+
+ [
+ [[link boost_asio.reference.posix__stream_descriptor_service.native [*native]]]
+ [Get the native descriptor implementation. ]
+ ]
+
+ [
+ [[link boost_asio.reference.posix__stream_descriptor_service.read_some [*read_some]]]
+ [Read some data from the stream. ]
+ ]
+
+ [
+ [[link boost_asio.reference.posix__stream_descriptor_service.shutdown_service [*shutdown_service]]]
+ [Destroy all user-defined descriptorr objects owned by the service. ]
+ ]
+
+ [
+ [[link boost_asio.reference.posix__stream_descriptor_service.stream_descriptor_service [*stream_descriptor_service]]]
+ [Construct a new stream descriptor service for the specified io_service. ]
+ ]
+
+ [
+ [[link boost_asio.reference.posix__stream_descriptor_service.write_some [*write_some]]]
+ [Write the given data to the stream. ]
+ ]
+
+]
+
+[heading Data Members]
+[table
+ [[Name][Description]]
+
+ [
+ [[link boost_asio.reference.posix__stream_descriptor_service.id [*id]]]
+ [The unique service identifier. ]
+ ]
+
+]
+
+
+[section:assign posix::stream_descriptor_service::assign]
+
+Assign an existing native descriptor to a stream descriptor.
+
+ boost::system::error_code assign(
+ implementation_type & impl,
+ const native_type & native_descriptor,
+ boost::system::error_code & ec);
+
+
+
+[endsect]
+
+
+
+[section:async_read_some posix::stream_descriptor_service::async_read_some]
+
+Start an asynchronous read.
+
+ template<
+ typename ``[link boost_asio.reference.MutableBufferSequence MutableBufferSequence]``,
+ typename ``[link boost_asio.reference.ReadHandler ReadHandler]``>
+ void async_read_some(
+ implementation_type & impl,
+ const MutableBufferSequence & buffers,
+ ReadHandler descriptorr);
+
+
+
+[endsect]
+
+
+
+[section:async_write_some posix::stream_descriptor_service::async_write_some]
+
+Start an asynchronous write.
+
+ template<
+ typename ``[link boost_asio.reference.ConstBufferSequence ConstBufferSequence]``,
+ typename ``[link boost_asio.reference.WriteHandler WriteHandler]``>
+ void async_write_some(
+ implementation_type & impl,
+ const ConstBufferSequence & buffers,
+ WriteHandler descriptorr);
+
+
+
+[endsect]
+
+
+
+[section:cancel posix::stream_descriptor_service::cancel]
+
+Cancel all asynchronous operations associated with the descriptor.
+
+ boost::system::error_code cancel(
+ implementation_type & impl,
+ boost::system::error_code & ec);
+
+
+
+[endsect]
+
+
+
+[section:close posix::stream_descriptor_service::close]
+
+Close a stream descriptor implementation.
+
+ boost::system::error_code close(
+ implementation_type & impl,
+ boost::system::error_code & ec);
+
+
+
+[endsect]
+
+
+
+[section:construct posix::stream_descriptor_service::construct]
+
+Construct a new stream descriptor implementation.
+
+ void construct(
+ implementation_type & impl);
+
+
+
+[endsect]
+
+
+
+[section:destroy posix::stream_descriptor_service::destroy]
+
+Destroy a stream descriptor implementation.
+
+ void destroy(
+ implementation_type & impl);
+
+
+
+[endsect]
+
+
+
+[section:get_io_service posix::stream_descriptor_service::get_io_service]
+
+
+['Inherited from io_service.]
+
+Get the io_service object that owns the service.
+
+ boost::asio::io_service & get_io_service();
+
+
+
+[endsect]
+
+
+
+[section:id posix::stream_descriptor_service::id]
+
+The unique service identifier.
+
+ static boost::asio::io_service::id id;
+
+
+
+[endsect]
+
+
+
+[section:implementation_type posix::stream_descriptor_service::implementation_type]
+
+The type of a stream descriptor implementation.
+
+ typedef implementation_defined implementation_type;
+
+
+
+
+[endsect]
+
+
+
+[section:io_control posix::stream_descriptor_service::io_control]
+
+Perform an IO control command on the descriptor.
+
+ template<
+ typename ``[link boost_asio.reference.IoControlCommand IoControlCommand]``>
+ boost::system::error_code io_control(
+ implementation_type & impl,
+ IoControlCommand & command,
+ boost::system::error_code & ec);
+
+
+
+[endsect]
+
+
+
+[section:io_service posix::stream_descriptor_service::io_service]
+
+
+['Inherited from io_service.]
+
+(Deprecated: use get_io_service().) Get the io_service object that owns the service.
+
+ boost::asio::io_service & io_service();
+
+
+
+[endsect]
+
+
+
+[section:is_open posix::stream_descriptor_service::is_open]
+
+Determine whether the descriptor is open.
+
+ bool is_open(
+ const implementation_type & impl) const;
+
+
+
+[endsect]
+
+
+
+[section:native posix::stream_descriptor_service::native]
+
+Get the native descriptor implementation.
+
+ native_type native(
+ implementation_type & impl);
+
+
+
+[endsect]
+
+
+
+[section:native_type posix::stream_descriptor_service::native_type]
+
+The native descriptor type.
+
+ typedef implementation_defined native_type;
+
+
+
+
+[endsect]
+
+
+
+[section:read_some posix::stream_descriptor_service::read_some]
+
+Read some data from the stream.
+
+ template<
+ typename ``[link boost_asio.reference.MutableBufferSequence MutableBufferSequence]``>
+ std::size_t read_some(
+ implementation_type & impl,
+ const MutableBufferSequence & buffers,
+ boost::system::error_code & ec);
+
+
+
+[endsect]
+
+
+
+[section:shutdown_service posix::stream_descriptor_service::shutdown_service]
+
+Destroy all user-defined descriptorr objects owned by the service.
+
+ void shutdown_service();
+
+
+
+[endsect]
+
+
+
+[section:stream_descriptor_service posix::stream_descriptor_service::stream_descriptor_service]
+
+Construct a new stream descriptor service for the specified io_service.
+
+ stream_descriptor_service(
+ boost::asio::io_service & io_service);
+
+
+
+[endsect]
+
+
+
+[section:write_some posix::stream_descriptor_service::write_some]
+
+Write the given data to the stream.
+
+ template<
+ typename ``[link boost_asio.reference.ConstBufferSequence ConstBufferSequence]``>
+ std::size_t write_some(
+ implementation_type & impl,
+ const ConstBufferSequence & buffers,
+ boost::system::error_code & ec);
+
+
+
+[endsect]
+
+
+
+[endsect]
+
+[section:read read]
+
+Attempt to read a certain amount of data from a stream before returning.
+
+ template<
+ typename ``[link boost_asio.reference.SyncReadStream SyncReadStream]``,
+ typename ``[link boost_asio.reference.MutableBufferSequence MutableBufferSequence]``>
+ std::size_t ``[link boost_asio.reference.read.overload1 read]``(
+ SyncReadStream & s,
+ const MutableBufferSequence & buffers);
+
+ template<
+ typename ``[link boost_asio.reference.SyncReadStream SyncReadStream]``,
+ typename ``[link boost_asio.reference.MutableBufferSequence MutableBufferSequence]``,
+ typename CompletionCondition>
+ std::size_t ``[link boost_asio.reference.read.overload2 read]``(
+ SyncReadStream & s,
+ const MutableBufferSequence & buffers,
+ CompletionCondition completion_condition);
+
+ template<
+ typename ``[link boost_asio.reference.SyncReadStream SyncReadStream]``,
+ typename ``[link boost_asio.reference.MutableBufferSequence MutableBufferSequence]``,
+ typename CompletionCondition>
+ std::size_t ``[link boost_asio.reference.read.overload3 read]``(
+ SyncReadStream & s,
+ const MutableBufferSequence & buffers,
+ CompletionCondition completion_condition,
+ boost::system::error_code & ec);
+
+ template<
+ typename ``[link boost_asio.reference.SyncReadStream SyncReadStream]``,
+ typename Allocator>
+ std::size_t ``[link boost_asio.reference.read.overload4 read]``(
+ SyncReadStream & s,
+ basic_streambuf< Allocator > & b);
+
+ template<
+ typename ``[link boost_asio.reference.SyncReadStream SyncReadStream]``,
+ typename Allocator,
+ typename CompletionCondition>
+ std::size_t ``[link boost_asio.reference.read.overload5 read]``(
+ SyncReadStream & s,
+ basic_streambuf< Allocator > & b,
+ CompletionCondition completion_condition);
+
+ template<
+ typename ``[link boost_asio.reference.SyncReadStream SyncReadStream]``,
+ typename Allocator,
+ typename CompletionCondition>
+ std::size_t ``[link boost_asio.reference.read.overload6 read]``(
+ SyncReadStream & s,
+ basic_streambuf< Allocator > & b,
+ CompletionCondition completion_condition,
+ boost::system::error_code & ec);
+
+
+[section:overload1 read (1 of 6 overloads)]
+
+Attempt to read a certain amount of data from a stream before returning.
+
+ template<
+ typename ``[link boost_asio.reference.SyncReadStream SyncReadStream]``,
+ typename ``[link boost_asio.reference.MutableBufferSequence MutableBufferSequence]``>
+ std::size_t read(
+ SyncReadStream & s,
+ const MutableBufferSequence & buffers);
+
+
+This function is used to read a certain number of bytes of data from a stream. The call will block until one of the following conditions is true:
+
+
+* The supplied buffers are full. That is, the bytes transferred is equal to the sum of the buffer sizes.
+
+* An error occurred.
+
+This operation is implemented in terms of one or more calls to the stream's read\_some function.
+
+
+[heading Parameters]
+
+
+[variablelist
+
+[[s][The stream from which the data is to be read. The type must support the SyncReadStream concept.]]
+
+[[buffers][One or more buffers into which the data will be read. The sum of the buffer sizes indicates the maximum number of bytes to read from the stream.]]
+
+]
+
+[heading Return Value]
+
+The number of bytes transferred.
+
+[heading Exceptions]
+
+
+[variablelist
+
+[[boost::system::system_error][Thrown on failure.]]
+
+]
+
+[heading Example]
+
+To read into a single data buffer use the
+[link boost_asio.reference.buffer buffer] function as follows:
+
+ boost::asio::read(s, boost::asio::buffer(data, size));
+
+
+See the
+[link boost_asio.reference.buffer buffer] documentation for information on reading into multiple buffers in one go, and how to use it with arrays, boost::array or std::vector.
+
+[heading Remarks]
+
+This overload is equivalent to calling:
+
+ boost::asio::read(
+ s, buffers,
+ boost::asio::transfer_all());
+
+
+
+
+
+
+[endsect]
+
+
+
+[section:overload2 read (2 of 6 overloads)]
+
+Attempt to read a certain amount of data from a stream before returning.
+
+ template<
+ typename ``[link boost_asio.reference.SyncReadStream SyncReadStream]``,
+ typename ``[link boost_asio.reference.MutableBufferSequence MutableBufferSequence]``,
+ typename CompletionCondition>
+ std::size_t read(
+ SyncReadStream & s,
+ const MutableBufferSequence & buffers,
+ CompletionCondition completion_condition);
+
+
+This function is used to read a certain number of bytes of data from a stream. The call will block until one of the following conditions is true:
+
+
+* The supplied buffers are full. That is, the bytes transferred is equal to the sum of the buffer sizes.
+
+* The completion_condition function object returns true.
+
+This operation is implemented in terms of one or more calls to the stream's read\_some function.
+
+
+[heading Parameters]
+
+
+[variablelist
+
+[[s][The stream from which the data is to be read. The type must support the SyncReadStream concept.]]
+
+[[buffers][One or more buffers into which the data will be read. The sum of the buffer sizes indicates the maximum number of bytes to read from the stream.]]
+
+[[completion_condition][The function object to be called to determine whether the read operation is complete. The signature of the function object must be:
+``
+ bool completion_condition(
+ const boost::system::error_code& error, // Result of latest read_some
+ // operation.
+
+ std::size_t bytes_transferred // Number of bytes transferred
+ // so far.
+ );
+
+``
+A return value of true indicates that the read operation is complete. False indicates that further calls to the stream's read\_some function are required.]]
+
+]
+
+[heading Return Value]
+
+The number of bytes transferred.
+
+[heading Exceptions]
+
+
+[variablelist
+
+[[boost::system::system_error][Thrown on failure.]]
+
+]
+
+[heading Example]
+
+To read into a single data buffer use the
+[link boost_asio.reference.buffer buffer] function as follows:
+
+ boost::asio::read(s, boost::asio::buffer(data, size),
+ boost::asio::transfer_at_least(32));
+
+
+See the
+[link boost_asio.reference.buffer buffer] documentation for information on reading into multiple buffers in one go, and how to use it with arrays, boost::array or std::vector.
+
+
+
+[endsect]
+
+
+
+[section:overload3 read (3 of 6 overloads)]
+
+Attempt to read a certain amount of data from a stream before returning.
+
+ template<
+ typename ``[link boost_asio.reference.SyncReadStream SyncReadStream]``,
+ typename ``[link boost_asio.reference.MutableBufferSequence MutableBufferSequence]``,
+ typename CompletionCondition>
+ std::size_t read(
+ SyncReadStream & s,
+ const MutableBufferSequence & buffers,
+ CompletionCondition completion_condition,
+ boost::system::error_code & ec);
+
+
+This function is used to read a certain number of bytes of data from a stream. The call will block until one of the following conditions is true:
+
+
+* The supplied buffers are full. That is, the bytes transferred is equal to the sum of the buffer sizes.
+
+* The completion_condition function object returns true.
+
+This operation is implemented in terms of one or more calls to the stream's read\_some function.
+
+
+[heading Parameters]
+
+
+[variablelist
+
+[[s][The stream from which the data is to be read. The type must support the SyncReadStream concept.]]
+
+[[buffers][One or more buffers into which the data will be read. The sum of the buffer sizes indicates the maximum number of bytes to read from the stream.]]
+
+[[completion_condition][The function object to be called to determine whether the read operation is complete. The signature of the function object must be:
+``
+ bool completion_condition(
+ const boost::system::error_code& error, // Result of latest read_some
+ // operation.
+
+ std::size_t bytes_transferred // Number of bytes transferred
+ // so far.
+ );
+
+``
+A return value of true indicates that the read operation is complete. False indicates that further calls to the stream's read\_some function are required.]]
+
+[[ec][Set to indicate what error occurred, if any.]]
+
+]
+
+[heading Return Value]
+
+The number of bytes read. If an error occurs, returns the total number of bytes successfully transferred prior to the error.
+
+
+
+[endsect]
+
+
+
+[section:overload4 read (4 of 6 overloads)]
+
+Attempt to read a certain amount of data from a stream before returning.
+
+ template<
+ typename ``[link boost_asio.reference.SyncReadStream SyncReadStream]``,
+ typename Allocator>
+ std::size_t read(
+ SyncReadStream & s,
+ basic_streambuf< Allocator > & b);
+
+
+This function is used to read a certain number of bytes of data from a stream. The call will block until one of the following conditions is true:
+
+
+* An error occurred.
+
+This operation is implemented in terms of one or more calls to the stream's read\_some function.
+
+
+[heading Parameters]
+
+
+[variablelist
+
+[[s][The stream from which the data is to be read. The type must support the SyncReadStream concept.]]
+
+[[b][The basic\_streambuf object into which the data will be read.]]
+
+]
+
+[heading Return Value]
+
+The number of bytes transferred.
+
+[heading Exceptions]
+
+
+[variablelist
+
+[[boost::system::system_error][Thrown on failure.]]
+
+]
+
+[heading Remarks]
+
+This overload is equivalent to calling:
+
+ boost::asio::read(
+ s, b,
+ boost::asio::transfer_all());
+
+
+
+
+
+
+[endsect]
+
+
+
+[section:overload5 read (5 of 6 overloads)]
+
+Attempt to read a certain amount of data from a stream before returning.
+
+ template<
+ typename ``[link boost_asio.reference.SyncReadStream SyncReadStream]``,
+ typename Allocator,
+ typename CompletionCondition>
+ std::size_t read(
+ SyncReadStream & s,
+ basic_streambuf< Allocator > & b,
+ CompletionCondition completion_condition);
+
+
+This function is used to read a certain number of bytes of data from a stream. The call will block until one of the following conditions is true:
+
+
+* The completion_condition function object returns true.
+
+This operation is implemented in terms of one or more calls to the stream's read\_some function.
+
+
+[heading Parameters]
+
+
+[variablelist
+
+[[s][The stream from which the data is to be read. The type must support the SyncReadStream concept.]]
+
+[[b][The basic\_streambuf object into which the data will be read.]]
+
+[[completion_condition][The function object to be called to determine whether the read operation is complete. The signature of the function object must be:
+``
+ bool completion_condition(
+ const boost::system::error_code& error, // Result of latest read_some
+ // operation.
+
+ std::size_t bytes_transferred // Number of bytes transferred
+ // so far.
+ );
+
+``
+A return value of true indicates that the read operation is complete. False indicates that further calls to the stream's read\_some function are required.]]
+
+]
+
+[heading Return Value]
+
+The number of bytes transferred.
+
+[heading Exceptions]
+
+
+[variablelist
+
+[[boost::system::system_error][Thrown on failure. ]]
+
+]
+
+
+
+[endsect]
+
+
+
+[section:overload6 read (6 of 6 overloads)]
+
+Attempt to read a certain amount of data from a stream before returning.
+
+ template<
+ typename ``[link boost_asio.reference.SyncReadStream SyncReadStream]``,
+ typename Allocator,
+ typename CompletionCondition>
+ std::size_t read(
+ SyncReadStream & s,
+ basic_streambuf< Allocator > & b,
+ CompletionCondition completion_condition,
+ boost::system::error_code & ec);
+
+
+This function is used to read a certain number of bytes of data from a stream. The call will block until one of the following conditions is true:
+
+
+* The completion_condition function object returns true.
+
+This operation is implemented in terms of one or more calls to the stream's read\_some function.
+
+
+[heading Parameters]
+
+
+[variablelist
+
+[[s][The stream from which the data is to be read. The type must support the SyncReadStream concept.]]
+
+[[b][The basic\_streambuf object into which the data will be read.]]
+
+[[completion_condition][The function object to be called to determine whether the read operation is complete. The signature of the function object must be:
+``
+ bool completion_condition(
+ const boost::system::error_code& error, // Result of latest read_some
+ // operation.
+
+ std::size_t bytes_transferred // Number of bytes transferred
+ // so far.
+ );
+
+``
+A return value of true indicates that the read operation is complete. False indicates that further calls to the stream's read\_some function are required.]]
+
+[[ec][Set to indicate what error occurred, if any.]]
+
+]
+
+[heading Return Value]
+
+The number of bytes read. If an error occurs, returns the total number of bytes successfully transferred prior to the error.
+
+
+
+[endsect]
+
+
+[endsect]
+
+[section:read_until read_until]
+
+Read data into a streambuf until a delimiter is encountered.
+
+ template<
+ typename ``[link boost_asio.reference.SyncReadStream SyncReadStream]``,
+ typename Allocator>
+ std::size_t ``[link boost_asio.reference.read_until.overload1 read_until]``(
+ SyncReadStream & s,
+ boost::asio::basic_streambuf< Allocator > & b,
+ char delim);
+
+ template<
+ typename ``[link boost_asio.reference.SyncReadStream SyncReadStream]``,
+ typename Allocator>
+ std::size_t ``[link boost_asio.reference.read_until.overload2 read_until]``(
+ SyncReadStream & s,
+ boost::asio::basic_streambuf< Allocator > & b,
+ char delim,
+ boost::system::error_code & ec);
+
+ template<
+ typename ``[link boost_asio.reference.SyncReadStream SyncReadStream]``,
+ typename Allocator>
+ std::size_t ``[link boost_asio.reference.read_until.overload3 read_until]``(
+ SyncReadStream & s,
+ boost::asio::basic_streambuf< Allocator > & b,
+ const std::string & delim);
+
+ template<
+ typename ``[link boost_asio.reference.SyncReadStream SyncReadStream]``,
+ typename Allocator>
+ std::size_t ``[link boost_asio.reference.read_until.overload4 read_until]``(
+ SyncReadStream & s,
+ boost::asio::basic_streambuf< Allocator > & b,
+ const std::string & delim,
+ boost::system::error_code & ec);
+
+ template<
+ typename ``[link boost_asio.reference.SyncReadStream SyncReadStream]``,
+ typename Allocator>
+ std::size_t ``[link boost_asio.reference.read_until.overload5 read_until]``(
+ SyncReadStream & s,
+ boost::asio::basic_streambuf< Allocator > & b,
+ const boost::regex & expr);
+
+ template<
+ typename ``[link boost_asio.reference.SyncReadStream SyncReadStream]``,
+ typename Allocator>
+ std::size_t ``[link boost_asio.reference.read_until.overload6 read_until]``(
+ SyncReadStream & s,
+ boost::asio::basic_streambuf< Allocator > & b,
+ const boost::regex & expr,
+ boost::system::error_code & ec);
+
+
+[section:overload1 read_until (1 of 6 overloads)]
+
+Read data into a streambuf until a delimiter is encountered.
+
+ template<
+ typename ``[link boost_asio.reference.SyncReadStream SyncReadStream]``,
+ typename Allocator>
+ std::size_t read_until(
+ SyncReadStream & s,
+ boost::asio::basic_streambuf< Allocator > & b,
+ char delim);
+
+
+This function is used to read data into the specified streambuf until the streambuf's get area contains the specified delimiter. The call will block until one of the following conditions is true:
+
+
+* The get area of the streambuf contains the specified delimiter.
+
+* An error occurred.
+
+This operation is implemented in terms of zero or more calls to the stream's read\_some function. If the streambuf's get area already contains the delimiter, the function returns immediately.
+
+
+[heading Parameters]
+
+
+[variablelist
+
+[[s][The stream from which the data is to be read. The type must support the SyncReadStream concept.]]
+
+[[b][A streambuf object into which the data will be read.]]
+
+[[delim][The delimiter character.]]
+
+]
+
+[heading Return Value]
+
+The number of bytes in the streambuf's get area up to and including the delimiter.
+
+[heading Exceptions]
+
+
+[variablelist
+
+[[boost::system::system_error][Thrown on failure.]]
+
+]
+
+[heading Example]
+
+To read data into a streambuf until a newline is encountered:
+
+ boost::asio::streambuf b;
+ boost::asio::read_until(s, b, '\n');
+ std::istream is(&b);
+ std::string line;
+ std::getline(is, line);
+
+
+
+
+
+
+[endsect]
+
+
+
+[section:overload2 read_until (2 of 6 overloads)]
+
+Read data into a streambuf until a delimiter is encountered.
+
+ template<
+ typename ``[link boost_asio.reference.SyncReadStream SyncReadStream]``,
+ typename Allocator>
+ std::size_t read_until(
+ SyncReadStream & s,
+ boost::asio::basic_streambuf< Allocator > & b,
+ char delim,
+ boost::system::error_code & ec);
+
+
+This function is used to read data into the specified streambuf until the streambuf's get area contains the specified delimiter. The call will block until one of the following conditions is true:
+
+
+* The get area of the streambuf contains the specified delimiter.
+
+* An error occurred.
+
+This operation is implemented in terms of zero or more calls to the stream's read\_some function. If the streambuf's get area already contains the delimiter, the function returns immediately.
+
+
+[heading Parameters]
+
+
+[variablelist
+
+[[s][The stream from which the data is to be read. The type must support the SyncReadStream concept.]]
+
+[[b][A streambuf object into which the data will be read.]]
+
+[[delim][The delimiter character.]]
+
+[[ec][Set to indicate what error occurred, if any.]]
+
+]
+
+[heading Return Value]
+
+The number of bytes in the streambuf's get area up to and including the delimiter. Returns 0 if an error occurred.
+
+
+
+[endsect]
+
+
+
+[section:overload3 read_until (3 of 6 overloads)]
+
+Read data into a streambuf until a delimiter is encountered.
+
+ template<
+ typename ``[link boost_asio.reference.SyncReadStream SyncReadStream]``,
+ typename Allocator>
+ std::size_t read_until(
+ SyncReadStream & s,
+ boost::asio::basic_streambuf< Allocator > & b,
+ const std::string & delim);
+
+
+This function is used to read data into the specified streambuf until the streambuf's get area contains the specified delimiter. The call will block until one of the following conditions is true:
+
+
+* The get area of the streambuf contains the specified delimiter.
+
+* An error occurred.
+
+This operation is implemented in terms of zero or more calls to the stream's read\_some function. If the streambuf's get area already contains the delimiter, the function returns immediately.
+
+
+[heading Parameters]
+
+
+[variablelist
+
+[[s][The stream from which the data is to be read. The type must support the SyncReadStream concept.]]
+
+[[b][A streambuf object into which the data will be read.]]
+
+[[delim][The delimiter string.]]
+
+]
+
+[heading Return Value]
+
+The number of bytes in the streambuf's get area up to and including the delimiter.
+
+[heading Exceptions]
+
+
+[variablelist
+
+[[boost::system::system_error][Thrown on failure.]]
+
+]
+
+[heading Example]
+
+To read data into a streambuf until a newline is encountered:
+
+ boost::asio::streambuf b;
+ boost::asio::read_until(s, b, "\r\n");
+ std::istream is(&b);
+ std::string line;
+ std::getline(is, line);
+
+
+
+
+
+
+[endsect]
+
+
+
+[section:overload4 read_until (4 of 6 overloads)]
+
+Read data into a streambuf until a delimiter is encountered.
+
+ template<
+ typename ``[link boost_asio.reference.SyncReadStream SyncReadStream]``,
+ typename Allocator>
+ std::size_t read_until(
+ SyncReadStream & s,
+ boost::asio::basic_streambuf< Allocator > & b,
+ const std::string & delim,
+ boost::system::error_code & ec);
+
+
+This function is used to read data into the specified streambuf until the streambuf's get area contains the specified delimiter. The call will block until one of the following conditions is true:
+
+
+* The get area of the streambuf contains the specified delimiter.
+
+* An error occurred.
+
+This operation is implemented in terms of zero or more calls to the stream's read\_some function. If the streambuf's get area already contains the delimiter, the function returns immediately.
+
+
+[heading Parameters]
+
+
+[variablelist
+
+[[s][The stream from which the data is to be read. The type must support the SyncReadStream concept.]]
+
+[[b][A streambuf object into which the data will be read.]]
+
+[[delim][The delimiter string.]]
+
+[[ec][Set to indicate what error occurred, if any.]]
+
+]
+
+[heading Return Value]
+
+The number of bytes in the streambuf's get area up to and including the delimiter. Returns 0 if an error occurred.
+
+
+
+[endsect]
+
+
+
+[section:overload5 read_until (5 of 6 overloads)]
+
+Read data into a streambuf until a regular expression is located.
+
+ template<
+ typename ``[link boost_asio.reference.SyncReadStream SyncReadStream]``,
+ typename Allocator>
+ std::size_t read_until(
+ SyncReadStream & s,
+ boost::asio::basic_streambuf< Allocator > & b,
+ const boost::regex & expr);
+
+
+This function is used to read data into the specified streambuf until the streambuf's get area contains some data that matches a regular expression. The call will block until one of the following conditions is true:
+
+
+* A substring of the streambuf's get area matches the regular expression.
+
+* An error occurred.
+
+This operation is implemented in terms of zero or more calls to the stream's read\_some function. If the streambuf's get area already contains data that matches the regular expression, the function returns immediately.
+
+
+[heading Parameters]
+
+
+[variablelist
+
+[[s][The stream from which the data is to be read. The type must support the SyncReadStream concept.]]
+
+[[b][A streambuf object into which the data will be read.]]
+
+[[expr][The regular expression.]]
+
+]
+
+[heading Return Value]
+
+The number of bytes in the streambuf's get area up to and including the substring that matches the regular expression.
+
+[heading Exceptions]
+
+
+[variablelist
+
+[[boost::system::system_error][Thrown on failure.]]
+
+]
+
+[heading Example]
+
+To read data into a streambuf until a CR-LF sequence is encountered:
+
+ boost::asio::streambuf b;
+ boost::asio::read_until(s, b, boost::regex("\r\n"));
+ std::istream is(&b);
+ std::string line;
+ std::getline(is, line);
+
+
+
+
+
+
+[endsect]
+
+
+
+[section:overload6 read_until (6 of 6 overloads)]
+
+Read data into a streambuf until a regular expression is located.
+
+ template<
+ typename ``[link boost_asio.reference.SyncReadStream SyncReadStream]``,
+ typename Allocator>
+ std::size_t read_until(
+ SyncReadStream & s,
+ boost::asio::basic_streambuf< Allocator > & b,
+ const boost::regex & expr,
+ boost::system::error_code & ec);
+
+
+This function is used to read data into the specified streambuf until the streambuf's get area contains some data that matches a regular expression. The call will block until one of the following conditions is true:
+
+
+* A substring of the streambuf's get area matches the regular expression.
+
+* An error occurred.
+
+This operation is implemented in terms of zero or more calls to the stream's read\_some function. If the streambuf's get area already contains data that matches the regular expression, the function returns immediately.
+
+
+[heading Parameters]
+
+
+[variablelist
+
+[[s][The stream from which the data is to be read. The type must support the SyncReadStream concept.]]
+
+[[b][A streambuf object into which the data will be read.]]
+
+[[expr][The regular expression.]]
+
+[[ec][Set to indicate what error occurred, if any.]]
+
+]
+
+[heading Return Value]
+
+The number of bytes in the streambuf's get area up to and including the substring that matches the regular expression. Returns 0 if an error occurred.
+
+
+
+[endsect]
+
+
+[endsect]
+
+[section:service_already_exists service_already_exists]
+
+Exception thrown when trying to add a duplicate service to an io_service.
+
+ class service_already_exists
+
+
+[heading Member Functions]
+[table
+ [[Name][Description]]
+
+ [
+ [[link boost_asio.reference.service_already_exists.service_already_exists [*service_already_exists]]]
+ []
+ ]
+
+]
+
+
+[section:service_already_exists service_already_exists::service_already_exists]
+
+
+
+ service_already_exists();
+
+
+
+[endsect]
+
+
+
+[endsect]
+
+[section:socket_acceptor_service socket_acceptor_service]
+
+Default service implementation for a socket acceptor.
+
+ template<
+ typename ``[link boost_asio.reference.Protocol Protocol]``>
+ class socket_acceptor_service :
+ public io_service::service
+
+
+[heading Types]
+[table
+ [[Name][Description]]
+
+ [
+
+ [[link boost_asio.reference.socket_acceptor_service.endpoint_type [*endpoint_type]]]
+ [The endpoint type. ]
+
+ ]
+
+ [
+
+ [[link boost_asio.reference.socket_acceptor_service.implementation_type [*implementation_type]]]
+ [The native type of the socket acceptor. ]
+
+ ]
+
+ [
+
+ [[link boost_asio.reference.socket_acceptor_service.native_type [*native_type]]]
+ [The native acceptor type. ]
+
+ ]
+
+ [
+
+ [[link boost_asio.reference.socket_acceptor_service.protocol_type [*protocol_type]]]
+ [The protocol type. ]
+
+ ]
+
+]
+
+[heading Member Functions]
+[table
+ [[Name][Description]]
+
+ [
+ [[link boost_asio.reference.socket_acceptor_service.accept [*accept]]]
+ [Accept a new connection. ]
+ ]
+
+ [
+ [[link boost_asio.reference.socket_acceptor_service.assign [*assign]]]
+ [Assign an existing native acceptor to a socket acceptor. ]
+ ]
+
+ [
+ [[link boost_asio.reference.socket_acceptor_service.async_accept [*async_accept]]]
+ [Start an asynchronous accept. ]
+ ]
+
+ [
+ [[link boost_asio.reference.socket_acceptor_service.bind [*bind]]]
+ [Bind the socket acceptor to the specified local endpoint. ]
+ ]
+
+ [
+ [[link boost_asio.reference.socket_acceptor_service.cancel [*cancel]]]
+ [Cancel all asynchronous operations associated with the acceptor. ]
+ ]
+
+ [
+ [[link boost_asio.reference.socket_acceptor_service.close [*close]]]
+ [Close a socket acceptor implementation. ]
+ ]
+
+ [
+ [[link boost_asio.reference.socket_acceptor_service.construct [*construct]]]
+ [Construct a new socket acceptor implementation. ]
+ ]
+
+ [
+ [[link boost_asio.reference.socket_acceptor_service.destroy [*destroy]]]
+ [Destroy a socket acceptor implementation. ]
+ ]
+
+ [
+ [[link boost_asio.reference.socket_acceptor_service.get_io_service [*get_io_service]]]
+ [Get the io_service object that owns the service. ]
+ ]
+
+ [
+ [[link boost_asio.reference.socket_acceptor_service.get_option [*get_option]]]
+ [Get a socket option. ]
+ ]
+
+ [
+ [[link boost_asio.reference.socket_acceptor_service.io_control [*io_control]]]
+ [Perform an IO control command on the socket. ]
+ ]
+
+ [
+ [[link boost_asio.reference.socket_acceptor_service.io_service [*io_service]]]
+ [(Deprecated: use get_io_service().) Get the io_service object that owns the service. ]
+ ]
+
+ [
+ [[link boost_asio.reference.socket_acceptor_service.is_open [*is_open]]]
+ [Determine whether the acceptor is open. ]
+ ]
+
+ [
+ [[link boost_asio.reference.socket_acceptor_service.listen [*listen]]]
+ [Place the socket acceptor into the state where it will listen for new connections. ]
+ ]
+
+ [
+ [[link boost_asio.reference.socket_acceptor_service.local_endpoint [*local_endpoint]]]
+ [Get the local endpoint. ]
+ ]
+
+ [
+ [[link boost_asio.reference.socket_acceptor_service.native [*native]]]
+ [Get the native acceptor implementation. ]
+ ]
+
+ [
+ [[link boost_asio.reference.socket_acceptor_service.open [*open]]]
+ [Open a new socket acceptor implementation. ]
+ ]
+
+ [
+ [[link boost_asio.reference.socket_acceptor_service.set_option [*set_option]]]
+ [Set a socket option. ]
+ ]
+
+ [
+ [[link boost_asio.reference.socket_acceptor_service.shutdown_service [*shutdown_service]]]
+ [Destroy all user-defined handler objects owned by the service. ]
+ ]
+
+ [
+ [[link boost_asio.reference.socket_acceptor_service.socket_acceptor_service [*socket_acceptor_service]]]
+ [Construct a new socket acceptor service for the specified io_service. ]
+ ]
+
+]
+
+[heading Data Members]
+[table
+ [[Name][Description]]
+
+ [
+ [[link boost_asio.reference.socket_acceptor_service.id [*id]]]
+ [The unique service identifier. ]
+ ]
+
+]
+
+
+[section:accept socket_acceptor_service::accept]
+
+Accept a new connection.
+
+ template<
+ typename ``[link boost_asio.reference.SocketService SocketService]``>
+ boost::system::error_code accept(
+ implementation_type & impl,
+ basic_socket< protocol_type, SocketService > & peer,
+ endpoint_type * peer_endpoint,
+ boost::system::error_code & ec);
+
+
+
+[endsect]
+
+
+
+[section:assign socket_acceptor_service::assign]
+
+Assign an existing native acceptor to a socket acceptor.
+
+ boost::system::error_code assign(
+ implementation_type & impl,
+ const protocol_type & protocol,
+ const native_type & native_acceptor,
+ boost::system::error_code & ec);
+
+
+
+[endsect]
+
+
+
+[section:async_accept socket_acceptor_service::async_accept]
+
+Start an asynchronous accept.
+
+ template<
+ typename ``[link boost_asio.reference.SocketService SocketService]``,
+ typename ``[link boost_asio.reference.AcceptHandler AcceptHandler]``>
+ void async_accept(
+ implementation_type & impl,
+ basic_socket< protocol_type, SocketService > & peer,
+ endpoint_type * peer_endpoint,
+ AcceptHandler handler);
+
+
+
+[endsect]
+
+
+
+[section:bind socket_acceptor_service::bind]
+
+Bind the socket acceptor to the specified local endpoint.
+
+ boost::system::error_code bind(
+ implementation_type & impl,
+ const endpoint_type & endpoint,
+ boost::system::error_code & ec);
+
+
+
+[endsect]
+
+
+
+[section:cancel socket_acceptor_service::cancel]
+
+Cancel all asynchronous operations associated with the acceptor.
+
+ boost::system::error_code cancel(
+ implementation_type & impl,
+ boost::system::error_code & ec);
+
+
+
+[endsect]
+
+
+
+[section:close socket_acceptor_service::close]
+
+Close a socket acceptor implementation.
+
+ boost::system::error_code close(
+ implementation_type & impl,
+ boost::system::error_code & ec);
+
+
+
+[endsect]
+
+
+
+[section:construct socket_acceptor_service::construct]
+
+Construct a new socket acceptor implementation.
+
+ void construct(
+ implementation_type & impl);
+
+
+
+[endsect]
+
+
+
+[section:destroy socket_acceptor_service::destroy]
+
+Destroy a socket acceptor implementation.
+
+ void destroy(
+ implementation_type & impl);
+
+
+
+[endsect]
+
+
+
+[section:endpoint_type socket_acceptor_service::endpoint_type]
+
+The endpoint type.
+
+ typedef protocol_type::endpoint endpoint_type;
+
+
+
+
+[endsect]
+
+
+
+[section:get_io_service socket_acceptor_service::get_io_service]
+
+
+['Inherited from io_service.]
+
+Get the io_service object that owns the service.
+
+ boost::asio::io_service & get_io_service();
+
+
+
+[endsect]
+
+
+
+[section:get_option socket_acceptor_service::get_option]
+
+Get a socket option.
+
+ template<
+ typename ``[link boost_asio.reference.GettableSocketOption GettableSocketOption]``>
+ boost::system::error_code get_option(
+ const implementation_type & impl,
+ GettableSocketOption & option,
+ boost::system::error_code & ec) const;
+
+
+
+[endsect]
+
+
+
+[section:id socket_acceptor_service::id]
+
+The unique service identifier.
+
+ static boost::asio::io_service::id id;
+
+
+
+[endsect]
+
+
+
+[section:implementation_type socket_acceptor_service::implementation_type]
+
+The native type of the socket acceptor.
+
+ typedef implementation_defined implementation_type;
+
+
+
+
+[endsect]
+
+
+
+[section:io_control socket_acceptor_service::io_control]
+
+Perform an IO control command on the socket.
+
+ template<
+ typename ``[link boost_asio.reference.IoControlCommand IoControlCommand]``>
+ boost::system::error_code io_control(
+ implementation_type & impl,
+ IoControlCommand & command,
+ boost::system::error_code & ec);
+
+
+
+[endsect]
+
+
+
+[section:io_service socket_acceptor_service::io_service]
+
+
+['Inherited from io_service.]
+
+(Deprecated: use get_io_service().) Get the io_service object that owns the service.
+
+ boost::asio::io_service & io_service();
+
+
+
+[endsect]
+
+
+
+[section:is_open socket_acceptor_service::is_open]
+
+Determine whether the acceptor is open.
+
+ bool is_open(
+ const implementation_type & impl) const;
+
+
+
+[endsect]
+
+
+
+[section:listen socket_acceptor_service::listen]
+
+Place the socket acceptor into the state where it will listen for new connections.
+
+ boost::system::error_code listen(
+ implementation_type & impl,
+ int backlog,
+ boost::system::error_code & ec);
+
+
+
+[endsect]
+
+
+
+[section:local_endpoint socket_acceptor_service::local_endpoint]
+
+Get the local endpoint.
+
+ endpoint_type local_endpoint(
+ const implementation_type & impl,
+ boost::system::error_code & ec) const;
+
+
+
+[endsect]
+
+
+
+[section:native socket_acceptor_service::native]
+
+Get the native acceptor implementation.
+
+ native_type native(
+ implementation_type & impl);
+
+
+
+[endsect]
+
+
+
+[section:native_type socket_acceptor_service::native_type]
+
+The native acceptor type.
+
+ typedef implementation_defined native_type;
+
+
+
+
+[endsect]
+
+
+
+[section:open socket_acceptor_service::open]
+
+Open a new socket acceptor implementation.
+
+ boost::system::error_code open(
+ implementation_type & impl,
+ const protocol_type & protocol,
+ boost::system::error_code & ec);
+
+
+
+[endsect]
+
+
+
+[section:protocol_type socket_acceptor_service::protocol_type]
+
+The protocol type.
+
+ typedef Protocol protocol_type;
+
+
+
+
+[endsect]
+
+
+
+[section:set_option socket_acceptor_service::set_option]
+
+Set a socket option.
+
+ template<
+ typename ``[link boost_asio.reference.SettableSocketOption SettableSocketOption]``>
+ boost::system::error_code set_option(
+ implementation_type & impl,
+ const SettableSocketOption & option,
+ boost::system::error_code & ec);
+
+
+
+[endsect]
+
+
+
+[section:shutdown_service socket_acceptor_service::shutdown_service]
+
+Destroy all user-defined handler objects owned by the service.
+
+ void shutdown_service();
+
+
+
+[endsect]
+
+
+
+[section:socket_acceptor_service socket_acceptor_service::socket_acceptor_service]
+
+Construct a new socket acceptor service for the specified io_service.
+
+ socket_acceptor_service(
+ boost::asio::io_service & io_service);
+
+
+
+[endsect]
+
+
+
+[endsect]
+
+[section:socket_base socket_base]
+
+The socket_base class is used as a base for the basic_stream_socket and basic_datagram_socket class templates so that we have a common place to define the shutdown_type and enum.
+
+ class socket_base
+
+
+[heading Types]
+[table
+ [[Name][Description]]
+
+ [
+
+ [[link boost_asio.reference.socket_base.broadcast [*broadcast]]]
+ [Socket option to permit sending of broadcast messages. ]
+
+ ]
+
+ [
+
+ [[link boost_asio.reference.socket_base.bytes_readable [*bytes_readable]]]
+ [IO control command to get the amount of data that can be read without blocking. ]
+
+ ]
+
+ [
+
+ [[link boost_asio.reference.socket_base.debug [*debug]]]
+ [Socket option to enable socket-level debugging. ]
+
+ ]
+
+ [
+
+ [[link boost_asio.reference.socket_base.do_not_route [*do_not_route]]]
+ [Socket option to prevent routing, use local interfaces only. ]
+
+ ]
+
+ [
+
+ [[link boost_asio.reference.socket_base.enable_connection_aborted [*enable_connection_aborted]]]
+ [Socket option to report aborted connections on accept. ]
+
+ ]
+
+ [
+
+ [[link boost_asio.reference.socket_base.keep_alive [*keep_alive]]]
+ [Socket option to send keep-alives. ]
+
+ ]
+
+ [
+
+ [[link boost_asio.reference.socket_base.linger [*linger]]]
+ [Socket option to specify whether the socket lingers on close if unsent data is present. ]
+
+ ]
+
+ [
+
+ [[link boost_asio.reference.socket_base.message_flags [*message_flags]]]
+ [Bitmask type for flags that can be passed to send and receive operations. ]
+
+ ]
+
+ [
+
+ [[link boost_asio.reference.socket_base.non_blocking_io [*non_blocking_io]]]
+ [IO control command to set the blocking mode of the socket. ]
+
+ ]
+
+ [
+
+ [[link boost_asio.reference.socket_base.receive_buffer_size [*receive_buffer_size]]]
+ [Socket option for the receive buffer size of a socket. ]
+
+ ]
+
+ [
+
+ [[link boost_asio.reference.socket_base.receive_low_watermark [*receive_low_watermark]]]
+ [Socket option for the receive low watermark. ]
+
+ ]
+
+ [
+
+ [[link boost_asio.reference.socket_base.reuse_address [*reuse_address]]]
+ [Socket option to allow the socket to be bound to an address that is already in use. ]
+
+ ]
+
+ [
+
+ [[link boost_asio.reference.socket_base.send_buffer_size [*send_buffer_size]]]
+ [Socket option for the send buffer size of a socket. ]
+
+ ]
+
+ [
+
+ [[link boost_asio.reference.socket_base.send_low_watermark [*send_low_watermark]]]
+ [Socket option for the send low watermark. ]
+
+ ]
+
+ [
+
+ [[link boost_asio.reference.socket_base.shutdown_type [*shutdown_type]]]
+ [Different ways a socket may be shutdown. ]
+
+ ]
+
+]
+
+[heading Protected Member Functions]
+[table
+ [[Name][Description]]
+
+ [
+ [[link boost_asio.reference.socket_base._socket_base [*~socket_base]]]
+ [Protected destructor to prevent deletion through this type. ]
+ ]
+
+]
+
+[heading Data Members]
+[table
+ [[Name][Description]]
+
+ [
+ [[link boost_asio.reference.socket_base.max_connections [*max_connections]]]
+ [The maximum length of the queue of pending incoming connections. ]
+ ]
+
+ [
+ [[link boost_asio.reference.socket_base.message_do_not_route [*message_do_not_route]]]
+ [Specify that the data should not be subject to routing. ]
+ ]
+
+ [
+ [[link boost_asio.reference.socket_base.message_out_of_band [*message_out_of_band]]]
+ [Process out-of-band data. ]
+ ]
+
+ [
+ [[link boost_asio.reference.socket_base.message_peek [*message_peek]]]
+ [Peek at incoming data without removing it from the input queue. ]
+ ]
+
+]
+
+
+[section:broadcast socket_base::broadcast]
+
+Socket option to permit sending of broadcast messages.
+
+ typedef implementation_defined broadcast;
+
+
+
+Implements the SOL\_SOCKET/SO\_BROADCAST socket option.
+
+
+[heading Examples]
+
+Setting the option:
+
+ boost::asio::ip::udp::socket socket(io_service);
+ ...
+ boost::asio::socket_base::broadcast option(true);
+ socket.set_option(option);
+
+
+
+
+Getting the current option value:
+
+ boost::asio::ip::udp::socket socket(io_service);
+ ...
+ boost::asio::socket_base::broadcast option;
+ socket.get_option(option);
+ bool is_set = option.value();
+
+
+
+
+
+
+[endsect]
+
+
+
+[section:bytes_readable socket_base::bytes_readable]
+
+IO control command to get the amount of data that can be read without blocking.
+
+ typedef implementation_defined bytes_readable;
+
+
+
+Implements the FIONREAD IO control command.
+
+
+[heading Example]
+
+
+
+ boost::asio::ip::tcp::socket socket(io_service);
+ ...
+ boost::asio::socket_base::bytes_readable command(true);
+ socket.io_control(command);
+ std::size_t bytes_readable = command.get();
+
+
+
+
+
+
+[endsect]
+
+
+
+[section:debug socket_base::debug]
+
+Socket option to enable socket-level debugging.
+
+ typedef implementation_defined debug;
+
+
+
+Implements the SOL\_SOCKET/SO\_DEBUG socket option.
+
+
+[heading Examples]
+
+Setting the option:
+
+ boost::asio::ip::tcp::socket socket(io_service);
+ ...
+ boost::asio::socket_base::debug option(true);
+ socket.set_option(option);
+
+
+
+
+Getting the current option value:
+
+ boost::asio::ip::tcp::socket socket(io_service);
+ ...
+ boost::asio::socket_base::debug option;
+ socket.get_option(option);
+ bool is_set = option.value();
+
+
+
+
+
+
+[endsect]
+
+
+
+[section:do_not_route socket_base::do_not_route]
+
+Socket option to prevent routing, use local interfaces only.
+
+ typedef implementation_defined do_not_route;
+
+
+
+Implements the SOL\_SOCKET/SO\_DONTROUTE socket option.
+
+
+[heading Examples]
+
+Setting the option:
+
+ boost::asio::ip::udp::socket socket(io_service);
+ ...
+ boost::asio::socket_base::do_not_route option(true);
+ socket.set_option(option);
+
+
+
+
+Getting the current option value:
+
+ boost::asio::ip::udp::socket socket(io_service);
+ ...
+ boost::asio::socket_base::do_not_route option;
+ socket.get_option(option);
+ bool is_set = option.value();
+
+
+
+
+
+
+[endsect]
+
+
+
+[section:enable_connection_aborted socket_base::enable_connection_aborted]
+
+Socket option to report aborted connections on accept.
+
+ typedef implementation_defined enable_connection_aborted;
+
+
+
+Implements a custom socket option that determines whether or not an accept operation is permitted to fail with boost::asio::error::connection\_aborted. By default the option is false.
+
+
+[heading Examples]
+
+Setting the option:
+
+ boost::asio::ip::tcp::acceptor acceptor(io_service);
+ ...
+ boost::asio::socket_base::enable_connection_aborted option(true);
+ acceptor.set_option(option);
+
+
+
+
+Getting the current option value:
+
+ boost::asio::ip::tcp::acceptor acceptor(io_service);
+ ...
+ boost::asio::socket_base::enable_connection_aborted option;
+ acceptor.get_option(option);
+ bool is_set = option.value();
+
+
+
+
+
+
+[endsect]
+
+
+
+[section:keep_alive socket_base::keep_alive]
+
+Socket option to send keep-alives.
+
+ typedef implementation_defined keep_alive;
+
+
+
+Implements the SOL\_SOCKET/SO\_KEEPALIVE socket option.
+
+
+[heading Examples]
+
+Setting the option:
+
+ boost::asio::ip::tcp::socket socket(io_service);
+ ...
+ boost::asio::socket_base::keep_alive option(true);
+ socket.set_option(option);
+
+
+
+
+Getting the current option value:
+
+ boost::asio::ip::tcp::socket socket(io_service);
+ ...
+ boost::asio::socket_base::keep_alive option;
+ socket.get_option(option);
+ bool is_set = option.value();
+
 
 
-[endsect]
 
 
 
-[section:overload6 read (6 of 6 overloads)]
+[endsect]
 
-Attempt to read a certain amount of data from a stream before returning.
 
- template<
- typename ``[link boost_asio.reference.SyncReadStream SyncReadStream]``,
- typename Allocator,
- typename CompletionCondition>
- std::size_t read(
- SyncReadStream & s,
- basic_streambuf< Allocator > & b,
- CompletionCondition completion_condition,
- boost::system::error_code & ec);
 
+[section:linger socket_base::linger]
 
-This function is used to read a certain number of bytes of data from a stream. The call will block until one of the following conditions is true:
+Socket option to specify whether the socket lingers on close if unsent data is present.
 
+ typedef implementation_defined linger;
 
-* The completion_condition function object returns true.
 
-This operation is implemented in terms of one or more calls to the stream's read\_some function.
 
+Implements the SOL\_SOCKET/SO\_LINGER socket option.
 
-[heading Parameters]
-
 
-[variablelist
+[heading Examples]
   
-[[s][The stream from which the data is to be read. The type must support the SyncReadStream concept.]]
+Setting the option:
 
-[[b][The basic\_streambuf object into which the data will be read.]]
+ boost::asio::ip::tcp::socket socket(io_service);
+ ...
+ boost::asio::socket_base::linger option(true, 30);
+ socket.set_option(option);
 
-[[completion_condition][The function object to be called to determine whether the read operation is complete. The signature of the function object must be:
-``
- bool completion_condition(
- const boost::system::error_code& error, // Result of latest read_some
- // operation.
 
- std::size_t bytes_transferred // Number of bytes transferred
- // so far.
- );
 
-``
-A return value of true indicates that the read operation is complete. False indicates that further calls to the stream's read\_some function are required.]]
 
-[[ec][Set to indicate what error occurred, if any.]]
+Getting the current option value:
 
-]
+ boost::asio::ip::tcp::socket socket(io_service);
+ ...
+ boost::asio::socket_base::linger option;
+ socket.get_option(option);
+ bool is_set = option.enabled();
+ unsigned short timeout = option.timeout();
 
-[heading Return Value]
-
-The number of bytes read. If an error occurs, returns the total number of bytes successfully transferred prior to the error.
 
 
 
-[endsect]
 
 
 [endsect]
 
-[section:read_until read_until]
 
-Read data into a streambuf until a delimiter is encountered.
 
- template<
- typename ``[link boost_asio.reference.SyncReadStream SyncReadStream]``,
- typename Allocator>
- std::size_t ``[link boost_asio.reference.read_until.overload1 read_until]``(
- SyncReadStream & s,
- boost::asio::basic_streambuf< Allocator > & b,
- char delim);
+[section:max_connections socket_base::max_connections]
 
- template<
- typename ``[link boost_asio.reference.SyncReadStream SyncReadStream]``,
- typename Allocator>
- std::size_t ``[link boost_asio.reference.read_until.overload2 read_until]``(
- SyncReadStream & s,
- boost::asio::basic_streambuf< Allocator > & b,
- char delim,
- boost::system::error_code & ec);
+The maximum length of the queue of pending incoming connections.
 
- template<
- typename ``[link boost_asio.reference.SyncReadStream SyncReadStream]``,
- typename Allocator>
- std::size_t ``[link boost_asio.reference.read_until.overload3 read_until]``(
- SyncReadStream & s,
- boost::asio::basic_streambuf< Allocator > & b,
- const std::string & delim);
+ static const int max_connections = implementation_defined;
 
- template<
- typename ``[link boost_asio.reference.SyncReadStream SyncReadStream]``,
- typename Allocator>
- std::size_t ``[link boost_asio.reference.read_until.overload4 read_until]``(
- SyncReadStream & s,
- boost::asio::basic_streambuf< Allocator > & b,
- const std::string & delim,
- boost::system::error_code & ec);
 
- template<
- typename ``[link boost_asio.reference.SyncReadStream SyncReadStream]``,
- typename Allocator>
- std::size_t ``[link boost_asio.reference.read_until.overload5 read_until]``(
- SyncReadStream & s,
- boost::asio::basic_streambuf< Allocator > & b,
- const boost::regex & expr);
 
- template<
- typename ``[link boost_asio.reference.SyncReadStream SyncReadStream]``,
- typename Allocator>
- std::size_t ``[link boost_asio.reference.read_until.overload6 read_until]``(
- SyncReadStream & s,
- boost::asio::basic_streambuf< Allocator > & b,
- const boost::regex & expr,
- boost::system::error_code & ec);
+[endsect]
 
 
-[section:overload1 read_until (1 of 6 overloads)]
 
-Read data into a streambuf until a delimiter is encountered.
+[section:message_do_not_route socket_base::message_do_not_route]
 
- template<
- typename ``[link boost_asio.reference.SyncReadStream SyncReadStream]``,
- typename Allocator>
- std::size_t read_until(
- SyncReadStream & s,
- boost::asio::basic_streambuf< Allocator > & b,
- char delim);
+Specify that the data should not be subject to routing.
 
+ static const int message_do_not_route = implementation_defined;
 
-This function is used to read data into the specified streambuf until the streambuf's get area contains the specified delimiter. The call will block until one of the following conditions is true:
 
 
-* The get area of the streambuf contains the specified delimiter.
+[endsect]
 
-* An error occurred.
 
-This operation is implemented in terms of zero or more calls to the stream's read\_some function. If the streambuf's get area already contains the delimiter, the function returns immediately.
 
+[section:message_flags socket_base::message_flags]
+
+Bitmask type for flags that can be passed to send and receive operations.
 
-[heading Parameters]
-
+ typedef int message_flags;
 
-[variablelist
-
-[[s][The stream from which the data is to be read. The type must support the SyncReadStream concept.]]
 
-[[b][A streambuf object into which the data will be read.]]
 
-[[delim][The delimiter character.]]
 
-]
+[endsect]
 
-[heading Return Value]
-
-The number of bytes in the streambuf's get area up to and including the delimiter.
 
-[heading Exceptions]
-
 
-[variablelist
-
-[[boost::system::system_error][Thrown on failure.]]
+[section:message_out_of_band socket_base::message_out_of_band]
 
-]
+Process out-of-band data.
 
-[heading Example]
-
-To read data into a streambuf until a newline is encountered:
+ static const int message_out_of_band = implementation_defined;
 
- boost::asio::streambuf b;
- boost::asio::read_until(s, b, '\n');
- std::istream is(&b);
- std::string line;
- std::getline(is, line);
 
 
+[endsect]
 
 
 
+[section:message_peek socket_base::message_peek]
 
-[endsect]
+Peek at incoming data without removing it from the input queue.
 
+ static const int message_peek = implementation_defined;
 
 
-[section:overload2 read_until (2 of 6 overloads)]
 
-Read data into a streambuf until a delimiter is encountered.
+[endsect]
 
- template<
- typename ``[link boost_asio.reference.SyncReadStream SyncReadStream]``,
- typename Allocator>
- std::size_t read_until(
- SyncReadStream & s,
- boost::asio::basic_streambuf< Allocator > & b,
- char delim,
- boost::system::error_code & ec);
 
 
-This function is used to read data into the specified streambuf until the streambuf's get area contains the specified delimiter. The call will block until one of the following conditions is true:
+[section:non_blocking_io socket_base::non_blocking_io]
 
+IO control command to set the blocking mode of the socket.
 
-* The get area of the streambuf contains the specified delimiter.
+ typedef implementation_defined non_blocking_io;
 
-* An error occurred.
 
-This operation is implemented in terms of zero or more calls to the stream's read\_some function. If the streambuf's get area already contains the delimiter, the function returns immediately.
 
+Implements the FIONBIO IO control command.
 
-[heading Parameters]
-
 
-[variablelist
+[heading Example]
   
-[[s][The stream from which the data is to be read. The type must support the SyncReadStream concept.]]
 
-[[b][A streambuf object into which the data will be read.]]
 
-[[delim][The delimiter character.]]
+ boost::asio::ip::tcp::socket socket(io_service);
+ ...
+ boost::asio::socket_base::non_blocking_io command(true);
+ socket.io_control(command);
 
-[[ec][Set to indicate what error occurred, if any.]]
 
-]
 
-[heading Return Value]
-
-The number of bytes in the streambuf's get area up to and including the delimiter. Returns 0 if an error occurred.
 
 
 
@@ -32240,265 +39968,243 @@
 
 
 
-[section:overload3 read_until (3 of 6 overloads)]
+[section:receive_buffer_size socket_base::receive_buffer_size]
 
-Read data into a streambuf until a delimiter is encountered.
+Socket option for the receive buffer size of a socket.
 
- template<
- typename ``[link boost_asio.reference.SyncReadStream SyncReadStream]``,
- typename Allocator>
- std::size_t read_until(
- SyncReadStream & s,
- boost::asio::basic_streambuf< Allocator > & b,
- const std::string & delim);
+ typedef implementation_defined receive_buffer_size;
 
 
-This function is used to read data into the specified streambuf until the streambuf's get area contains the specified delimiter. The call will block until one of the following conditions is true:
 
+Implements the SOL\_SOCKET/SO\_RCVBUF socket option.
 
-* The get area of the streambuf contains the specified delimiter.
 
-* An error occurred.
+[heading Examples]
+
+Setting the option:
 
-This operation is implemented in terms of zero or more calls to the stream's read\_some function. If the streambuf's get area already contains the delimiter, the function returns immediately.
+ boost::asio::ip::tcp::socket socket(io_service);
+ ...
+ boost::asio::socket_base::receive_buffer_size option(8192);
+ socket.set_option(option);
 
 
-[heading Parameters]
-
 
-[variablelist
-
-[[s][The stream from which the data is to be read. The type must support the SyncReadStream concept.]]
 
-[[b][A streambuf object into which the data will be read.]]
+Getting the current option value:
 
-[[delim][The delimiter string.]]
+ boost::asio::ip::tcp::socket socket(io_service);
+ ...
+ boost::asio::socket_base::receive_buffer_size option;
+ socket.get_option(option);
+ int size = option.value();
 
-]
 
-[heading Return Value]
-
-The number of bytes in the streambuf's get area up to and including the delimiter.
 
-[heading Exceptions]
-
 
-[variablelist
-
-[[boost::system::system_error][Thrown on failure.]]
 
-]
 
-[heading Example]
-
-To read data into a streambuf until a newline is encountered:
+[endsect]
 
- boost::asio::streambuf b;
- boost::asio::read_until(s, b, "\r\n");
- std::istream is(&b);
- std::string line;
- std::getline(is, line);
 
 
+[section:receive_low_watermark socket_base::receive_low_watermark]
 
+Socket option for the receive low watermark.
 
+ typedef implementation_defined receive_low_watermark;
 
 
-[endsect]
 
+Implements the SOL\_SOCKET/SO\_RCVLOWAT socket option.
 
 
-[section:overload4 read_until (4 of 6 overloads)]
+[heading Examples]
+
+Setting the option:
 
-Read data into a streambuf until a delimiter is encountered.
+ boost::asio::ip::tcp::socket socket(io_service);
+ ...
+ boost::asio::socket_base::receive_low_watermark option(1024);
+ socket.set_option(option);
 
- template<
- typename ``[link boost_asio.reference.SyncReadStream SyncReadStream]``,
- typename Allocator>
- std::size_t read_until(
- SyncReadStream & s,
- boost::asio::basic_streambuf< Allocator > & b,
- const std::string & delim,
- boost::system::error_code & ec);
 
 
-This function is used to read data into the specified streambuf until the streambuf's get area contains the specified delimiter. The call will block until one of the following conditions is true:
 
+Getting the current option value:
 
-* The get area of the streambuf contains the specified delimiter.
+ boost::asio::ip::tcp::socket socket(io_service);
+ ...
+ boost::asio::socket_base::receive_low_watermark option;
+ socket.get_option(option);
+ int size = option.value();
 
-* An error occurred.
 
-This operation is implemented in terms of zero or more calls to the stream's read\_some function. If the streambuf's get area already contains the delimiter, the function returns immediately.
 
 
-[heading Parameters]
-
 
-[variablelist
-
-[[s][The stream from which the data is to be read. The type must support the SyncReadStream concept.]]
 
-[[b][A streambuf object into which the data will be read.]]
+[endsect]
 
-[[delim][The delimiter string.]]
 
-[[ec][Set to indicate what error occurred, if any.]]
 
-]
+[section:reuse_address socket_base::reuse_address]
 
-[heading Return Value]
-
-The number of bytes in the streambuf's get area up to and including the delimiter. Returns 0 if an error occurred.
+Socket option to allow the socket to be bound to an address that is already in use.
 
+ typedef implementation_defined reuse_address;
 
 
-[endsect]
 
+Implements the SOL\_SOCKET/SO\_REUSEADDR socket option.
 
 
-[section:overload5 read_until (5 of 6 overloads)]
+[heading Examples]
+
+Setting the option:
 
-Read data into a streambuf until a regular expression is located.
+ boost::asio::ip::tcp::acceptor acceptor(io_service);
+ ...
+ boost::asio::socket_base::reuse_address option(true);
+ acceptor.set_option(option);
 
- template<
- typename ``[link boost_asio.reference.SyncReadStream SyncReadStream]``,
- typename Allocator>
- std::size_t read_until(
- SyncReadStream & s,
- boost::asio::basic_streambuf< Allocator > & b,
- const boost::regex & expr);
 
 
-This function is used to read data into the specified streambuf until the streambuf's get area contains some data that matches a regular expression. The call will block until one of the following conditions is true:
 
+Getting the current option value:
 
-* A substring of the streambuf's get area matches the regular expression.
+ boost::asio::ip::tcp::acceptor acceptor(io_service);
+ ...
+ boost::asio::socket_base::reuse_address option;
+ acceptor.get_option(option);
+ bool is_set = option.value();
 
-* An error occurred.
 
-This operation is implemented in terms of zero or more calls to the stream's read\_some function. If the streambuf's get area already contains data that matches the regular expression, the function returns immediately.
 
 
-[heading Parameters]
-
 
-[variablelist
-
-[[s][The stream from which the data is to be read. The type must support the SyncReadStream concept.]]
 
-[[b][A streambuf object into which the data will be read.]]
+[endsect]
 
-[[expr][The regular expression.]]
 
-]
 
-[heading Return Value]
-
-The number of bytes in the streambuf's get area up to and including the substring that matches the regular expression.
+[section:send_buffer_size socket_base::send_buffer_size]
 
-[heading Exceptions]
-
+Socket option for the send buffer size of a socket.
 
-[variablelist
-
-[[boost::system::system_error][Thrown on failure.]]
+ typedef implementation_defined send_buffer_size;
 
-]
 
-[heading Example]
+
+Implements the SOL\_SOCKET/SO\_SNDBUF socket option.
+
+
+[heading Examples]
   
-To read data into a streambuf until a CR-LF sequence is encountered:
+Setting the option:
 
- boost::asio::streambuf b;
- boost::asio::read_until(s, b, boost::regex("\r\n"));
- std::istream is(&b);
- std::string line;
- std::getline(is, line);
+ boost::asio::ip::tcp::socket socket(io_service);
+ ...
+ boost::asio::socket_base::send_buffer_size option(8192);
+ socket.set_option(option);
 
 
 
 
+Getting the current option value:
 
+ boost::asio::ip::tcp::socket socket(io_service);
+ ...
+ boost::asio::socket_base::send_buffer_size option;
+ socket.get_option(option);
+ int size = option.value();
 
-[endsect]
 
 
 
-[section:overload6 read_until (6 of 6 overloads)]
 
-Read data into a streambuf until a regular expression is located.
 
- template<
- typename ``[link boost_asio.reference.SyncReadStream SyncReadStream]``,
- typename Allocator>
- std::size_t read_until(
- SyncReadStream & s,
- boost::asio::basic_streambuf< Allocator > & b,
- const boost::regex & expr,
- boost::system::error_code & ec);
+[endsect]
 
 
-This function is used to read data into the specified streambuf until the streambuf's get area contains some data that matches a regular expression. The call will block until one of the following conditions is true:
 
+[section:send_low_watermark socket_base::send_low_watermark]
 
-* A substring of the streambuf's get area matches the regular expression.
+Socket option for the send low watermark.
 
-* An error occurred.
+ typedef implementation_defined send_low_watermark;
 
-This operation is implemented in terms of zero or more calls to the stream's read\_some function. If the streambuf's get area already contains data that matches the regular expression, the function returns immediately.
 
 
-[heading Parameters]
-
+Implements the SOL\_SOCKET/SO\_SNDLOWAT socket option.
 
-[variablelist
+
+[heading Examples]
   
-[[s][The stream from which the data is to be read. The type must support the SyncReadStream concept.]]
+Setting the option:
 
-[[b][A streambuf object into which the data will be read.]]
+ boost::asio::ip::tcp::socket socket(io_service);
+ ...
+ boost::asio::socket_base::send_low_watermark option(1024);
+ socket.set_option(option);
 
-[[expr][The regular expression.]]
 
-[[ec][Set to indicate what error occurred, if any.]]
 
-]
 
-[heading Return Value]
-
-The number of bytes in the streambuf's get area up to and including the substring that matches the regular expression. Returns 0 if an error occurred.
+Getting the current option value:
+
+ boost::asio::ip::tcp::socket socket(io_service);
+ ...
+ boost::asio::socket_base::send_low_watermark option;
+ socket.get_option(option);
+ int size = option.value();
+
 
 
 
-[endsect]
 
 
 [endsect]
 
-[section:service_already_exists service_already_exists]
 
-Exception thrown when trying to add a duplicate service to an io_service.
 
- class service_already_exists
+[section:shutdown_type socket_base::shutdown_type]
 
+Different ways a socket may be shutdown.
 
-[heading Member Functions]
-[table
- [[Name][Description]]
+ enum shutdown_type
+
+[heading Values]
+[variablelist
 
   [
- [[link boost_asio.reference.service_already_exists.service_already_exists [*service_already_exists]]]
- []
+ [shutdown_receive]
+ [Shutdown the receive side of the socket. ]
   ]
-
+
+ [
+ [shutdown_send]
+ [Shutdown the send side of the socket. ]
+ ]
+
+ [
+ [shutdown_both]
+ [Shutdown both send and receive on the socket. ]
+ ]
+
 ]
 
 
-[section:service_already_exists service_already_exists::service_already_exists]
 
+[endsect]
 
 
- service_already_exists();
+
+[section:_socket_base socket_base::~socket_base]
+
+Protected destructor to prevent deletion through this type.
+
+ ~socket_base();
 
 
 
@@ -32508,14 +40214,14 @@
 
 [endsect]
 
-[section:socket_acceptor_service socket_acceptor_service]
+[section:ssl__basic_context ssl::basic_context]
 
-Default service implementation for a socket acceptor.
+SSL context.
 
   template<
- typename ``[link boost_asio.reference.Protocol Protocol]``>
- class socket_acceptor_service :
- public io_service::service
+ typename ``[link boost_asio.reference.Service Service]``>
+ class basic_context :
+ public ssl::context_base
 
 
 [heading Types]
@@ -32524,29 +40230,50 @@
 
   [
 
- [[link boost_asio.reference.socket_acceptor_service.endpoint_type [*endpoint_type]]]
- [The endpoint type. ]
+ [[link boost_asio.reference.ssl__basic_context.file_format [*file_format]]]
+ [File format types. ]
   
   ]
 
   [
 
- [[link boost_asio.reference.socket_acceptor_service.implementation_type [*implementation_type]]]
- [The native type of the socket acceptor. ]
+ [[link boost_asio.reference.ssl__basic_context.impl_type [*impl_type]]]
+ [The native implementation type of the locking dispatcher. ]
   
   ]
 
   [
 
- [[link boost_asio.reference.socket_acceptor_service.native_type [*native_type]]]
- [The native acceptor type. ]
+ [[link boost_asio.reference.ssl__basic_context.method [*method]]]
+ [Different methods supported by a context. ]
   
   ]
 
   [
 
- [[link boost_asio.reference.socket_acceptor_service.protocol_type [*protocol_type]]]
- [The protocol type. ]
+ [[link boost_asio.reference.ssl__basic_context.options [*options]]]
+ [Bitmask type for SSL options. ]
+
+ ]
+
+ [
+
+ [[link boost_asio.reference.ssl__basic_context.password_purpose [*password_purpose]]]
+ [Purpose of PEM password. ]
+
+ ]
+
+ [
+
+ [[link boost_asio.reference.ssl__basic_context.service_type [*service_type]]]
+ [The type of the service that will be used to provide context operations. ]
+
+ ]
+
+ [
+
+ [[link boost_asio.reference.ssl__basic_context.verify_mode [*verify_mode]]]
+ [Bitmask type for peer verification. ]
   
   ]
 
@@ -32557,165 +40284,163 @@
   [[Name][Description]]
 
   [
- [[link boost_asio.reference.socket_acceptor_service.accept [*accept]]]
- [Accept a new connection. ]
+ [[link boost_asio.reference.ssl__basic_context.add_verify_path [*add_verify_path]]]
+ [Add a directory containing certificate authority files to be used for performing verification. ]
   ]
   
   [
- [[link boost_asio.reference.socket_acceptor_service.assign [*assign]]]
- [Assign an existing native acceptor to a socket acceptor. ]
+ [[link boost_asio.reference.ssl__basic_context.basic_context [*basic_context]]]
+ [Constructor. ]
   ]
   
   [
- [[link boost_asio.reference.socket_acceptor_service.async_accept [*async_accept]]]
- [Start an asynchronous accept. ]
+ [[link boost_asio.reference.ssl__basic_context.impl [*impl]]]
+ [Get the underlying implementation in the native type. ]
   ]
   
   [
- [[link boost_asio.reference.socket_acceptor_service.bind [*bind]]]
- [Bind the socket acceptor to the specified local endpoint. ]
+ [[link boost_asio.reference.ssl__basic_context.load_verify_file [*load_verify_file]]]
+ [Load a certification authority file for performing verification. ]
   ]
   
   [
- [[link boost_asio.reference.socket_acceptor_service.cancel [*cancel]]]
- [Cancel all asynchronous operations associated with the acceptor. ]
+ [[link boost_asio.reference.ssl__basic_context.set_options [*set_options]]]
+ [Set options on the context. ]
   ]
   
   [
- [[link boost_asio.reference.socket_acceptor_service.close [*close]]]
- [Close a socket acceptor implementation. ]
+ [[link boost_asio.reference.ssl__basic_context.set_password_callback [*set_password_callback]]]
+ [Set the password callback. ]
   ]
   
   [
- [[link boost_asio.reference.socket_acceptor_service.construct [*construct]]]
- [Construct a new socket acceptor implementation. ]
+ [[link boost_asio.reference.ssl__basic_context.set_verify_mode [*set_verify_mode]]]
+ [Set the peer verification mode. ]
   ]
   
   [
- [[link boost_asio.reference.socket_acceptor_service.destroy [*destroy]]]
- [Destroy a socket acceptor implementation. ]
+ [[link boost_asio.reference.ssl__basic_context.use_certificate_chain_file [*use_certificate_chain_file]]]
+ [Use a certificate chain from a file. ]
   ]
   
   [
- [[link boost_asio.reference.socket_acceptor_service.get_io_service [*get_io_service]]]
- [Get the io_service object that owns the service. ]
+ [[link boost_asio.reference.ssl__basic_context.use_certificate_file [*use_certificate_file]]]
+ [Use a certificate from a file. ]
   ]
   
   [
- [[link boost_asio.reference.socket_acceptor_service.get_option [*get_option]]]
- [Get a socket option. ]
+ [[link boost_asio.reference.ssl__basic_context.use_private_key_file [*use_private_key_file]]]
+ [Use a private key from a file. ]
   ]
   
   [
- [[link boost_asio.reference.socket_acceptor_service.io_control [*io_control]]]
- [Perform an IO control command on the socket. ]
+ [[link boost_asio.reference.ssl__basic_context.use_rsa_private_key_file [*use_rsa_private_key_file]]]
+ [Use an RSA private key from a file. ]
   ]
   
   [
- [[link boost_asio.reference.socket_acceptor_service.io_service [*io_service]]]
- [(Deprecated: use get_io_service().) Get the io_service object that owns the service. ]
+ [[link boost_asio.reference.ssl__basic_context.use_tmp_dh_file [*use_tmp_dh_file]]]
+ [Use the specified file to obtain the temporary Diffie-Hellman parameters. ]
   ]
   
   [
- [[link boost_asio.reference.socket_acceptor_service.is_open [*is_open]]]
- [Determine whether the acceptor is open. ]
+ [[link boost_asio.reference.ssl__basic_context._basic_context [*~basic_context]]]
+ [Destructor. ]
   ]
   
+]
+
+[heading Data Members]
+[table
+ [[Name][Description]]
+
   [
- [[link boost_asio.reference.socket_acceptor_service.listen [*listen]]]
- [Place the socket acceptor into the state where it will listen for new connections. ]
+ [[link boost_asio.reference.ssl__basic_context.default_workarounds [*default_workarounds]]]
+ [Implement various bug workarounds. ]
   ]
-
+
   [
- [[link boost_asio.reference.socket_acceptor_service.local_endpoint [*local_endpoint]]]
- [Get the local endpoint. ]
+ [[link boost_asio.reference.ssl__basic_context.no_sslv2 [*no_sslv2]]]
+ [Disable SSL v2. ]
   ]
-
+
   [
- [[link boost_asio.reference.socket_acceptor_service.native [*native]]]
- [Get the native acceptor implementation. ]
+ [[link boost_asio.reference.ssl__basic_context.no_sslv3 [*no_sslv3]]]
+ [Disable SSL v3. ]
   ]
-
+
   [
- [[link boost_asio.reference.socket_acceptor_service.open [*open]]]
- [Open a new socket acceptor implementation. ]
+ [[link boost_asio.reference.ssl__basic_context.no_tlsv1 [*no_tlsv1]]]
+ [Disable TLS v1. ]
   ]
-
+
   [
- [[link boost_asio.reference.socket_acceptor_service.set_option [*set_option]]]
- [Set a socket option. ]
+ [[link boost_asio.reference.ssl__basic_context.single_dh_use [*single_dh_use]]]
+ [Always create a new key when using tmp_dh parameters. ]
   ]
-
+
   [
- [[link boost_asio.reference.socket_acceptor_service.shutdown_service [*shutdown_service]]]
- [Destroy all user-defined handler objects owned by the service. ]
+ [[link boost_asio.reference.ssl__basic_context.verify_client_once [*verify_client_once]]]
+ [Do not request client certificate on renegotiation. Ignored unless verify_peer is set. ]
   ]
-
+
   [
- [[link boost_asio.reference.socket_acceptor_service.socket_acceptor_service [*socket_acceptor_service]]]
- [Construct a new socket acceptor service for the specified io_service. ]
+ [[link boost_asio.reference.ssl__basic_context.verify_fail_if_no_peer_cert [*verify_fail_if_no_peer_cert]]]
+ [Fail verification if the peer has no certificate. Ignored unless verify_peer is set. ]
   ]
-
-]
 
-[heading Data Members]
-[table
- [[Name][Description]]
+ [
+ [[link boost_asio.reference.ssl__basic_context.verify_none [*verify_none]]]
+ [No verification. ]
+ ]
 
   [
- [[link boost_asio.reference.socket_acceptor_service.id [*id]]]
- [The unique service identifier. ]
+ [[link boost_asio.reference.ssl__basic_context.verify_peer [*verify_peer]]]
+ [Verify the peer. ]
   ]
 
 ]
 
+[section:add_verify_path ssl::basic_context::add_verify_path]
 
-[section:accept socket_acceptor_service::accept]
+Add a directory containing certificate authority files to be used for performing verification.
 
-Accept a new connection.
+ void ``[link boost_asio.reference.ssl__basic_context.add_verify_path.overload1 add_verify_path]``(
+ const std::string & path);
 
- template<
- typename ``[link boost_asio.reference.SocketService SocketService]``>
- boost::system::error_code accept(
- implementation_type & impl,
- basic_socket< protocol_type, SocketService > & peer,
- endpoint_type * peer_endpoint,
+ boost::system::error_code ``[link boost_asio.reference.ssl__basic_context.add_verify_path.overload2 add_verify_path]``(
+ const std::string & path,
       boost::system::error_code & ec);
 
 
+[section:overload1 ssl::basic_context::add_verify_path (1 of 2 overloads)]
 
-[endsect]
-
-
-
-[section:assign socket_acceptor_service::assign]
+Add a directory containing certificate authority files to be used for performing verification.
 
-Assign an existing native acceptor to a socket acceptor.
+ void add_verify_path(
+ const std::string & path);
 
- boost::system::error_code assign(
- implementation_type & impl,
- const protocol_type & protocol,
- const native_type & native_acceptor,
- boost::system::error_code & ec);
 
+This function is used to specify the name of a directory containing certification authority certificates. Each file in the directory must contain a single certificate. The files must be named using the subject name's hash and an extension of ".0".
 
 
-[endsect]
+[heading Parameters]
+
 
+[variablelist
+
+[[path][The name of a directory containing the certificates.]]
 
+]
 
-[section:async_accept socket_acceptor_service::async_accept]
+[heading Exceptions]
+
 
-Start an asynchronous accept.
+[variablelist
+
+[[boost::system::system_error][Thrown on failure. ]]
 
- template<
- typename ``[link boost_asio.reference.SocketService SocketService]``,
- typename ``[link boost_asio.reference.AcceptHandler AcceptHandler]``>
- void async_accept(
- implementation_type & impl,
- basic_socket< protocol_type, SocketService > & peer,
- endpoint_type * peer_endpoint,
- AcceptHandler handler);
+]
 
 
 
@@ -32723,81 +40448,89 @@
 
 
 
-[section:bind socket_acceptor_service::bind]
+[section:overload2 ssl::basic_context::add_verify_path (2 of 2 overloads)]
 
-Bind the socket acceptor to the specified local endpoint.
+Add a directory containing certificate authority files to be used for performing verification.
 
- boost::system::error_code bind(
- implementation_type & impl,
- const endpoint_type & endpoint,
+ boost::system::error_code add_verify_path(
+ const std::string & path,
       boost::system::error_code & ec);
 
 
-
-[endsect]
+This function is used to specify the name of a directory containing certification authority certificates. Each file in the directory must contain a single certificate. The files must be named using the subject name's hash and an extension of ".0".
 
 
+[heading Parameters]
+
 
-[section:cancel socket_acceptor_service::cancel]
+[variablelist
+
+[[path][The name of a directory containing the certificates.]]
 
-Cancel all asynchronous operations associated with the acceptor.
+[[ec][Set to indicate what error occurred, if any. ]]
 
- boost::system::error_code cancel(
- implementation_type & impl,
- boost::system::error_code & ec);
+]
 
 
 
 [endsect]
 
 
+[endsect]
 
-[section:close socket_acceptor_service::close]
 
-Close a socket acceptor implementation.
+[section:basic_context ssl::basic_context::basic_context]
 
- boost::system::error_code close(
- implementation_type & impl,
- boost::system::error_code & ec);
+Constructor.
 
+ basic_context(
+ boost::asio::io_service & io_service,
+ method m);
 
 
-[endsect]
 
+[endsect]
 
 
-[section:construct socket_acceptor_service::construct]
 
-Construct a new socket acceptor implementation.
+[section:default_workarounds ssl::basic_context::default_workarounds]
 
- void construct(
- implementation_type & impl);
 
+['Inherited from ssl::context_base.]
 
+Implement various bug workarounds.
 
-[endsect]
+ static const int default_workarounds = implementation_defined;
 
 
 
-[section:destroy socket_acceptor_service::destroy]
+[endsect]
 
-Destroy a socket acceptor implementation.
 
- void destroy(
- implementation_type & impl);
 
+[section:file_format ssl::basic_context::file_format]
 
 
-[endsect]
+['Inherited from ssl::context_base.]
 
+File format types.
 
+ enum file_format
 
-[section:endpoint_type socket_acceptor_service::endpoint_type]
+[heading Values]
+[variablelist
 
-The endpoint type.
+ [
+ [asn1]
+ [ASN.1 file. ]
+ ]
 
- typedef protocol_type::endpoint endpoint_type;
+ [
+ [pem]
+ [PEM file. ]
+ ]
 
+]
 
 
 
@@ -32805,73 +40538,72 @@
 
 
 
-[section:get_io_service socket_acceptor_service::get_io_service]
-
+[section:impl ssl::basic_context::impl]
 
-['Inherited from io_service.]
+Get the underlying implementation in the native type.
 
-Get the io_service object that owns the service.
+ impl_type impl();
 
- boost::asio::io_service & get_io_service();
 
+This function may be used to obtain the underlying implementation of the context. This is intended to allow access to context functionality that is not otherwise provided.
 
 
 [endsect]
 
 
 
-[section:get_option socket_acceptor_service::get_option]
-
-Get a socket option.
-
- template<
- typename ``[link boost_asio.reference.GettableSocketOption GettableSocketOption]``>
- boost::system::error_code get_option(
- const implementation_type & impl,
- GettableSocketOption & option,
- boost::system::error_code & ec) const;
-
+[section:impl_type ssl::basic_context::impl_type]
 
+The native implementation type of the locking dispatcher.
 
-[endsect]
+ typedef service_type::impl_type impl_type;
 
 
 
-[section:id socket_acceptor_service::id]
 
-The unique service identifier.
+[endsect]
 
- static boost::asio::io_service::id id;
 
+[section:load_verify_file ssl::basic_context::load_verify_file]
 
+Load a certification authority file for performing verification.
 
-[endsect]
+ void ``[link boost_asio.reference.ssl__basic_context.load_verify_file.overload1 load_verify_file]``(
+ const std::string & filename);
 
+ boost::system::error_code ``[link boost_asio.reference.ssl__basic_context.load_verify_file.overload2 load_verify_file]``(
+ const std::string & filename,
+ boost::system::error_code & ec);
 
 
-[section:implementation_type socket_acceptor_service::implementation_type]
+[section:overload1 ssl::basic_context::load_verify_file (1 of 2 overloads)]
 
-The native type of the socket acceptor.
+Load a certification authority file for performing verification.
 
- typedef implementation_defined implementation_type;
+ void load_verify_file(
+ const std::string & filename);
 
 
+This function is used to load one or more trusted certification authorities from a file.
 
 
-[endsect]
+[heading Parameters]
+
 
+[variablelist
+
+[[filename][The name of a file containing certification authority certificates in PEM format.]]
 
+]
 
-[section:io_control socket_acceptor_service::io_control]
+[heading Exceptions]
+
 
-Perform an IO control command on the socket.
+[variablelist
+
+[[boost::system::system_error][Thrown on failure. ]]
 
- template<
- typename ``[link boost_asio.reference.IoControlCommand IoControlCommand]``>
- boost::system::error_code io_control(
- implementation_type & impl,
- IoControlCommand & command,
- boost::system::error_code & ec);
+]
 
 
 
@@ -32879,69 +40611,110 @@
 
 
 
-[section:io_service socket_acceptor_service::io_service]
-
+[section:overload2 ssl::basic_context::load_verify_file (2 of 2 overloads)]
 
-['Inherited from io_service.]
+Load a certification authority file for performing verification.
 
-(Deprecated: use get_io_service().) Get the io_service object that owns the service.
+ boost::system::error_code load_verify_file(
+ const std::string & filename,
+ boost::system::error_code & ec);
 
- boost::asio::io_service & io_service();
 
+This function is used to load the certificates for one or more trusted certification authorities from a file.
 
 
-[endsect]
+[heading Parameters]
+
 
+[variablelist
+
+[[filename][The name of a file containing certification authority certificates in PEM format.]]
 
+[[ec][Set to indicate what error occurred, if any. ]]
 
-[section:is_open socket_acceptor_service::is_open]
+]
 
-Determine whether the acceptor is open.
 
- bool is_open(
- const implementation_type & impl) const;
 
+[endsect]
 
 
 [endsect]
 
 
+[section:method ssl::basic_context::method]
 
-[section:listen socket_acceptor_service::listen]
-
-Place the socket acceptor into the state where it will listen for new connections.
 
- boost::system::error_code listen(
- implementation_type & impl,
- int backlog,
- boost::system::error_code & ec);
+['Inherited from ssl::context_base.]
 
+Different methods supported by a context.
 
+ enum method
 
-[endsect]
+[heading Values]
+[variablelist
 
+ [
+ [sslv2]
+ [Generic SSL version 2. ]
+ ]
 
+ [
+ [sslv2_client]
+ [SSL version 2 client. ]
+ ]
 
-[section:local_endpoint socket_acceptor_service::local_endpoint]
+ [
+ [sslv2_server]
+ [SSL version 2 server. ]
+ ]
 
-Get the local endpoint.
+ [
+ [sslv3]
+ [Generic SSL version 3. ]
+ ]
 
- endpoint_type local_endpoint(
- const implementation_type & impl,
- boost::system::error_code & ec) const;
+ [
+ [sslv3_client]
+ [SSL version 3 client. ]
+ ]
 
+ [
+ [sslv3_server]
+ [SSL version 3 server. ]
+ ]
 
+ [
+ [tlsv1]
+ [Generic TLS version 1. ]
+ ]
 
-[endsect]
+ [
+ [tlsv1_client]
+ [TLS version 1 client. ]
+ ]
 
+ [
+ [tlsv1_server]
+ [TLS version 1 server. ]
+ ]
 
+ [
+ [sslv23]
+ [Generic SSL/TLS. ]
+ ]
 
-[section:native socket_acceptor_service::native]
+ [
+ [sslv23_client]
+ [SSL/TLS client. ]
+ ]
 
-Get the native acceptor implementation.
+ [
+ [sslv23_server]
+ [SSL/TLS server. ]
+ ]
 
- native_type native(
- implementation_type & impl);
+]
 
 
 
@@ -32949,12 +40722,14 @@
 
 
 
-[section:native_type socket_acceptor_service::native_type]
+[section:no_sslv2 ssl::basic_context::no_sslv2]
 
-The native acceptor type.
 
- typedef implementation_defined native_type;
+['Inherited from ssl::context_base.]
+
+Disable SSL v2.
 
+ static const int no_sslv2 = implementation_defined;
 
 
 
@@ -32962,14 +40737,14 @@
 
 
 
-[section:open socket_acceptor_service::open]
+[section:no_sslv3 ssl::basic_context::no_sslv3]
 
-Open a new socket acceptor implementation.
 
- boost::system::error_code open(
- implementation_type & impl,
- const protocol_type & protocol,
- boost::system::error_code & ec);
+['Inherited from ssl::context_base.]
+
+Disable SSL v3.
+
+ static const int no_sslv3 = implementation_defined;
 
 
 
@@ -32977,12 +40752,14 @@
 
 
 
-[section:protocol_type socket_acceptor_service::protocol_type]
+[section:no_tlsv1 ssl::basic_context::no_tlsv1]
 
-The protocol type.
 
- typedef Protocol protocol_type;
+['Inherited from ssl::context_base.]
+
+Disable TLS v1.
 
+ static const int no_tlsv1 = implementation_defined;
 
 
 
@@ -32990,41 +40767,45 @@
 
 
 
-[section:set_option socket_acceptor_service::set_option]
+[section:options ssl::basic_context::options]
 
-Set a socket option.
 
- template<
- typename ``[link boost_asio.reference.SettableSocketOption SettableSocketOption]``>
- boost::system::error_code set_option(
- implementation_type & impl,
- const SettableSocketOption & option,
- boost::system::error_code & ec);
+['Inherited from ssl::context_base.]
 
+Bitmask type for SSL options.
 
+ typedef int options;
 
-[endsect]
 
 
 
-[section:shutdown_service socket_acceptor_service::shutdown_service]
+[endsect]
 
-Destroy all user-defined handler objects owned by the service.
 
- void shutdown_service();
 
+[section:password_purpose ssl::basic_context::password_purpose]
 
 
-[endsect]
+['Inherited from ssl::context_base.]
 
+Purpose of PEM password.
 
+ enum password_purpose
 
-[section:socket_acceptor_service socket_acceptor_service::socket_acceptor_service]
+[heading Values]
+[variablelist
 
-Construct a new socket acceptor service for the specified io_service.
+ [
+ [for_reading]
+ [The password is needed for reading/decryption. ]
+ ]
 
- socket_acceptor_service(
- boost::asio::io_service & io_service);
+ [
+ [for_writing]
+ [The password is needed for writing/encryption. ]
+ ]
+
+]
 
 
 
@@ -33032,186 +40813,149 @@
 
 
 
-[endsect]
+[section:service_type ssl::basic_context::service_type]
 
-[section:socket_base socket_base]
+The type of the service that will be used to provide context operations.
 
-The socket_base class is used as a base for the basic_stream_socket and basic_datagram_socket class templates so that we have a common place to define the shutdown_type and enum.
+ typedef Service service_type;
 
- class socket_base
 
 
-[heading Types]
-[table
- [[Name][Description]]
 
- [
+[endsect]
 
- [[link boost_asio.reference.socket_base.broadcast [*broadcast]]]
- [Socket option to permit sending of broadcast messages. ]
-
- ]
 
- [
+[section:set_options ssl::basic_context::set_options]
 
- [[link boost_asio.reference.socket_base.bytes_readable [*bytes_readable]]]
- [IO control command to get the amount of data that can be read without blocking. ]
-
- ]
+Set options on the context.
 
- [
+ void ``[link boost_asio.reference.ssl__basic_context.set_options.overload1 set_options]``(
+ options o);
 
- [[link boost_asio.reference.socket_base.debug [*debug]]]
- [Socket option to enable socket-level debugging. ]
-
- ]
+ boost::system::error_code ``[link boost_asio.reference.ssl__basic_context.set_options.overload2 set_options]``(
+ options o,
+ boost::system::error_code & ec);
 
- [
 
- [[link boost_asio.reference.socket_base.do_not_route [*do_not_route]]]
- [Socket option to prevent routing, use local interfaces only. ]
-
- ]
+[section:overload1 ssl::basic_context::set_options (1 of 2 overloads)]
 
- [
+Set options on the context.
 
- [[link boost_asio.reference.socket_base.enable_connection_aborted [*enable_connection_aborted]]]
- [Socket option to report aborted connections on accept. ]
-
- ]
+ void set_options(
+ options o);
 
- [
 
- [[link boost_asio.reference.socket_base.keep_alive [*keep_alive]]]
- [Socket option to send keep-alives. ]
-
- ]
+This function may be used to configure the SSL options used by the context.
 
- [
 
- [[link boost_asio.reference.socket_base.linger [*linger]]]
- [Socket option to specify whether the socket lingers on close if unsent data is present. ]
+[heading Parameters]
+
+
+[variablelist
   
- ]
+[[o][A bitmask of options. The available option values are defined in the context\_base class. The options are bitwise-ored with any existing value for the options.]]
 
- [
+]
 
- [[link boost_asio.reference.socket_base.message_flags [*message_flags]]]
- [Bitmask type for flags that can be passed to send and receive operations. ]
+[heading Exceptions]
+
+
+[variablelist
   
- ]
+[[boost::system::system_error][Thrown on failure. ]]
 
- [
+]
 
- [[link boost_asio.reference.socket_base.non_blocking_io [*non_blocking_io]]]
- [IO control command to set the blocking mode of the socket. ]
-
- ]
 
- [
 
- [[link boost_asio.reference.socket_base.receive_buffer_size [*receive_buffer_size]]]
- [Socket option for the receive buffer size of a socket. ]
-
- ]
+[endsect]
 
- [
 
- [[link boost_asio.reference.socket_base.receive_low_watermark [*receive_low_watermark]]]
- [Socket option for the receive low watermark. ]
-
- ]
 
- [
+[section:overload2 ssl::basic_context::set_options (2 of 2 overloads)]
 
- [[link boost_asio.reference.socket_base.reuse_address [*reuse_address]]]
- [Socket option to allow the socket to be bound to an address that is already in use. ]
-
- ]
+Set options on the context.
 
- [
+ boost::system::error_code set_options(
+ options o,
+ boost::system::error_code & ec);
 
- [[link boost_asio.reference.socket_base.send_buffer_size [*send_buffer_size]]]
- [Socket option for the send buffer size of a socket. ]
-
- ]
 
- [
+This function may be used to configure the SSL options used by the context.
 
- [[link boost_asio.reference.socket_base.send_low_watermark [*send_low_watermark]]]
- [Socket option for the send low watermark. ]
-
- ]
 
- [
+[heading Parameters]
+
 
- [[link boost_asio.reference.socket_base.shutdown_type [*shutdown_type]]]
- [Different ways a socket may be shutdown. ]
+[variablelist
   
- ]
+[[o][A bitmask of options. The available option values are defined in the context\_base class. The options are bitwise-ored with any existing value for the options.]]
 
-]
+[[ec][Set to indicate what error occurred, if any. ]]
 
-[heading Data Members]
-[table
- [[Name][Description]]
+]
 
- [
- [[link boost_asio.reference.socket_base.max_connections [*max_connections]]]
- [The maximum length of the queue of pending incoming connections. ]
- ]
 
- [
- [[link boost_asio.reference.socket_base.message_do_not_route [*message_do_not_route]]]
- [Specify that the data should not be subject to routing. ]
- ]
 
- [
- [[link boost_asio.reference.socket_base.message_out_of_band [*message_out_of_band]]]
- [Process out-of-band data. ]
- ]
+[endsect]
 
- [
- [[link boost_asio.reference.socket_base.message_peek [*message_peek]]]
- [Peek at incoming data without removing it from the input queue. ]
- ]
 
-]
+[endsect]
 
+[section:set_password_callback ssl::basic_context::set_password_callback]
 
-[section:broadcast socket_base::broadcast]
+Set the password callback.
 
-Socket option to permit sending of broadcast messages.
+ template<
+ typename PasswordCallback>
+ void ``[link boost_asio.reference.ssl__basic_context.set_password_callback.overload1 set_password_callback]``(
+ PasswordCallback callback);
 
- typedef implementation_defined broadcast;
+ template<
+ typename PasswordCallback>
+ boost::system::error_code ``[link boost_asio.reference.ssl__basic_context.set_password_callback.overload2 set_password_callback]``(
+ PasswordCallback callback,
+ boost::system::error_code & ec);
 
 
+[section:overload1 ssl::basic_context::set_password_callback (1 of 2 overloads)]
 
-Implements the SOL\_SOCKET/SO\_BROADCAST socket option.
+Set the password callback.
 
+ template<
+ typename PasswordCallback>
+ void set_password_callback(
+ PasswordCallback callback);
 
-[heading Examples]
-
-Setting the option:
 
- boost::asio::ip::udp::socket socket(io_service);
- ...
- boost::asio::socket_base::broadcast option(true);
- socket.set_option(option);
+This function is used to specify a callback function to obtain password information about an encrypted key in PEM format.
 
 
+[heading Parameters]
+
 
+[variablelist
+
+[[callback][The function object to be used for obtaining the password. The function signature of the handler must be:
+``
+ std::string password_callback(
+ std::size_t max_length, // The maximum size for a password.
+ password_purpose purpose // Whether password is for reading or writing.
+ );
 
-Getting the current option value:
+``
+The return value of the callback is a string containing the password.]]
 
- boost::asio::ip::udp::socket socket(io_service);
- ...
- boost::asio::socket_base::broadcast option;
- socket.get_option(option);
- bool is_set = option.value();
+]
 
+[heading Exceptions]
+
 
+[variablelist
+
+[[boost::system::system_error][Thrown on failure. ]]
 
+]
 
 
 
@@ -33219,69 +40963,86 @@
 
 
 
-[section:bytes_readable socket_base::bytes_readable]
+[section:overload2 ssl::basic_context::set_password_callback (2 of 2 overloads)]
 
-IO control command to get the amount of data that can be read without blocking.
+Set the password callback.
 
- typedef implementation_defined bytes_readable;
+ template<
+ typename PasswordCallback>
+ boost::system::error_code set_password_callback(
+ PasswordCallback callback,
+ boost::system::error_code & ec);
 
 
+This function is used to specify a callback function to obtain password information about an encrypted key in PEM format.
 
-Implements the FIONREAD IO control command.
 
+[heading Parameters]
+
 
-[heading Example]
+[variablelist
   
+[[callback][The function object to be used for obtaining the password. The function signature of the handler must be:
+``
+ std::string password_callback(
+ std::size_t max_length, // The maximum size for a password.
+ password_purpose purpose // Whether password is for reading or writing.
+ );
 
+``
+The return value of the callback is a string containing the password.]]
 
- boost::asio::ip::tcp::socket socket(io_service);
- ...
- boost::asio::socket_base::bytes_readable command(true);
- socket.io_control(command);
- std::size_t bytes_readable = command.get();
-
-
+[[ec][Set to indicate what error occurred, if any. ]]
 
+]
 
 
 
 [endsect]
 
 
+[endsect]
 
-[section:debug socket_base::debug]
+[section:set_verify_mode ssl::basic_context::set_verify_mode]
 
-Socket option to enable socket-level debugging.
+Set the peer verification mode.
 
- typedef implementation_defined debug;
+ void ``[link boost_asio.reference.ssl__basic_context.set_verify_mode.overload1 set_verify_mode]``(
+ verify_mode v);
 
+ boost::system::error_code ``[link boost_asio.reference.ssl__basic_context.set_verify_mode.overload2 set_verify_mode]``(
+ verify_mode v,
+ boost::system::error_code & ec);
 
 
-Implements the SOL\_SOCKET/SO\_DEBUG socket option.
+[section:overload1 ssl::basic_context::set_verify_mode (1 of 2 overloads)]
 
+Set the peer verification mode.
 
-[heading Examples]
-
-Setting the option:
+ void set_verify_mode(
+ verify_mode v);
 
- boost::asio::ip::tcp::socket socket(io_service);
- ...
- boost::asio::socket_base::debug option(true);
- socket.set_option(option);
 
+This function may be used to configure the peer verification mode used by the context.
 
 
+[heading Parameters]
+
 
-Getting the current option value:
+[variablelist
+
+[[v][A bitmask of peer verification modes. The available verify\_mode values are defined in the context\_base class.]]
 
- boost::asio::ip::tcp::socket socket(io_service);
- ...
- boost::asio::socket_base::debug option;
- socket.get_option(option);
- bool is_set = option.value();
+]
 
+[heading Exceptions]
+
 
+[variablelist
+
+[[boost::system::system_error][Thrown on failure. ]]
 
+]
 
 
 
@@ -33289,79 +41050,91 @@
 
 
 
-[section:do_not_route socket_base::do_not_route]
+[section:overload2 ssl::basic_context::set_verify_mode (2 of 2 overloads)]
 
-Socket option to prevent routing, use local interfaces only.
+Set the peer verification mode.
 
- typedef implementation_defined do_not_route;
+ boost::system::error_code set_verify_mode(
+ verify_mode v,
+ boost::system::error_code & ec);
 
 
+This function may be used to configure the peer verification mode used by the context.
 
-Implements the SOL\_SOCKET/SO\_DONTROUTE socket option.
 
+[heading Parameters]
+
 
-[heading Examples]
+[variablelist
   
-Setting the option:
+[[v][A bitmask of peer verification modes. The available verify\_mode values are defined in the context\_base class.]]
 
- boost::asio::ip::udp::socket socket(io_service);
- ...
- boost::asio::socket_base::do_not_route option(true);
- socket.set_option(option);
+[[ec][Set to indicate what error occurred, if any. ]]
 
+]
 
 
 
-Getting the current option value:
+[endsect]
 
- boost::asio::ip::udp::socket socket(io_service);
- ...
- boost::asio::socket_base::do_not_route option;
- socket.get_option(option);
- bool is_set = option.value();
 
+[endsect]
 
 
+[section:single_dh_use ssl::basic_context::single_dh_use]
 
 
+['Inherited from ssl::context_base.]
 
-[endsect]
+Always create a new key when using tmp_dh parameters.
 
+ static const int single_dh_use = implementation_defined;
 
 
-[section:enable_connection_aborted socket_base::enable_connection_aborted]
 
-Socket option to report aborted connections on accept.
+[endsect]
 
- typedef implementation_defined enable_connection_aborted;
 
+[section:use_certificate_chain_file ssl::basic_context::use_certificate_chain_file]
 
+Use a certificate chain from a file.
 
-Implements a custom socket option that determines whether or not an accept operation is permitted to fail with boost::asio::error::connection\_aborted. By default the option is false.
+ void ``[link boost_asio.reference.ssl__basic_context.use_certificate_chain_file.overload1 use_certificate_chain_file]``(
+ const std::string & filename);
 
+ boost::system::error_code ``[link boost_asio.reference.ssl__basic_context.use_certificate_chain_file.overload2 use_certificate_chain_file]``(
+ const std::string & filename,
+ boost::system::error_code & ec);
 
-[heading Examples]
-
-Setting the option:
 
- boost::asio::ip::tcp::acceptor acceptor(io_service);
- ...
- boost::asio::socket_base::enable_connection_aborted option(true);
- acceptor.set_option(option);
+[section:overload1 ssl::basic_context::use_certificate_chain_file (1 of 2 overloads)]
+
+Use a certificate chain from a file.
+
+ void use_certificate_chain_file(
+ const std::string & filename);
 
 
+This function is used to load a certificate chain into the context from a file.
 
 
-Getting the current option value:
+[heading Parameters]
+
 
- boost::asio::ip::tcp::acceptor acceptor(io_service);
- ...
- boost::asio::socket_base::enable_connection_aborted option;
- acceptor.get_option(option);
- bool is_set = option.value();
+[variablelist
+
+[[filename][The name of the file containing the certificate. The file must use the PEM format.]]
+
+]
 
+[heading Exceptions]
+
 
+[variablelist
+
+[[boost::system::system_error][Thrown on failure. ]]
 
+]
 
 
 
@@ -33369,117 +41142,166 @@
 
 
 
-[section:keep_alive socket_base::keep_alive]
+[section:overload2 ssl::basic_context::use_certificate_chain_file (2 of 2 overloads)]
 
-Socket option to send keep-alives.
+Use a certificate chain from a file.
 
- typedef implementation_defined keep_alive;
+ boost::system::error_code use_certificate_chain_file(
+ const std::string & filename,
+ boost::system::error_code & ec);
 
 
+This function is used to load a certificate chain into the context from a file.
 
-Implements the SOL\_SOCKET/SO\_KEEPALIVE socket option.
 
+[heading Parameters]
+
 
-[heading Examples]
+[variablelist
   
-Setting the option:
+[[filename][The name of the file containing the certificate. The file must use the PEM format.]]
 
- boost::asio::ip::tcp::socket socket(io_service);
- ...
- boost::asio::socket_base::keep_alive option(true);
- socket.set_option(option);
+[[ec][Set to indicate what error occurred, if any. ]]
 
+]
 
 
 
-Getting the current option value:
+[endsect]
 
- boost::asio::ip::tcp::socket socket(io_service);
- ...
- boost::asio::socket_base::keep_alive option;
- socket.get_option(option);
- bool is_set = option.value();
 
+[endsect]
 
+[section:use_certificate_file ssl::basic_context::use_certificate_file]
 
+Use a certificate from a file.
 
+ void ``[link boost_asio.reference.ssl__basic_context.use_certificate_file.overload1 use_certificate_file]``(
+ const std::string & filename,
+ file_format format);
 
+ boost::system::error_code ``[link boost_asio.reference.ssl__basic_context.use_certificate_file.overload2 use_certificate_file]``(
+ const std::string & filename,
+ file_format format,
+ boost::system::error_code & ec);
 
-[endsect]
 
+[section:overload1 ssl::basic_context::use_certificate_file (1 of 2 overloads)]
 
+Use a certificate from a file.
 
-[section:linger socket_base::linger]
+ void use_certificate_file(
+ const std::string & filename,
+ file_format format);
 
-Socket option to specify whether the socket lingers on close if unsent data is present.
 
- typedef implementation_defined linger;
+This function is used to load a certificate into the context from a file.
 
 
+[heading Parameters]
+
 
-Implements the SOL\_SOCKET/SO\_LINGER socket option.
+[variablelist
+
+[[filename][The name of the file containing the certificate.]]
 
+[[format][The file format (ASN.1 or PEM).]]
 
-[heading Examples]
+]
+
+[heading Exceptions]
+
+
+[variablelist
   
-Setting the option:
+[[boost::system::system_error][Thrown on failure. ]]
 
- boost::asio::ip::tcp::socket socket(io_service);
- ...
- boost::asio::socket_base::linger option(true, 30);
- socket.set_option(option);
+]
 
 
 
+[endsect]
 
-Getting the current option value:
 
- boost::asio::ip::tcp::socket socket(io_service);
- ...
- boost::asio::socket_base::linger option;
- socket.get_option(option);
- bool is_set = option.enabled();
- unsigned short timeout = option.timeout();
 
+[section:overload2 ssl::basic_context::use_certificate_file (2 of 2 overloads)]
+
+Use a certificate from a file.
+
+ boost::system::error_code use_certificate_file(
+ const std::string & filename,
+ file_format format,
+ boost::system::error_code & ec);
 
 
+This function is used to load a certificate into the context from a file.
 
 
+[heading Parameters]
+
 
-[endsect]
+[variablelist
+
+[[filename][The name of the file containing the certificate.]]
 
+[[format][The file format (ASN.1 or PEM).]]
 
+[[ec][Set to indicate what error occurred, if any. ]]
 
-[section:max_connections socket_base::max_connections]
+]
 
-The maximum length of the queue of pending incoming connections.
 
- static const int max_connections = implementation_defined;
 
+[endsect]
 
 
 [endsect]
 
+[section:use_private_key_file ssl::basic_context::use_private_key_file]
 
+Use a private key from a file.
 
-[section:message_do_not_route socket_base::message_do_not_route]
+ void ``[link boost_asio.reference.ssl__basic_context.use_private_key_file.overload1 use_private_key_file]``(
+ const std::string & filename,
+ file_format format);
 
-Specify that the data should not be subject to routing.
+ boost::system::error_code ``[link boost_asio.reference.ssl__basic_context.use_private_key_file.overload2 use_private_key_file]``(
+ const std::string & filename,
+ file_format format,
+ boost::system::error_code & ec);
 
- static const int message_do_not_route = implementation_defined;
 
+[section:overload1 ssl::basic_context::use_private_key_file (1 of 2 overloads)]
 
+Use a private key from a file.
 
-[endsect]
+ void use_private_key_file(
+ const std::string & filename,
+ file_format format);
 
 
+This function is used to load a private key into the context from a file.
 
-[section:message_flags socket_base::message_flags]
 
-Bitmask type for flags that can be passed to send and receive operations.
+[heading Parameters]
+
 
- typedef int message_flags;
+[variablelist
+
+[[filename][The name of the file containing the private key.]]
+
+[[format][The file format (ASN.1 or PEM).]]
+
+]
+
+[heading Exceptions]
+
+
+[variablelist
+
+[[boost::system::system_error][Thrown on failure. ]]
 
+]
 
 
 
@@ -33487,132 +41309,164 @@
 
 
 
-[section:message_out_of_band socket_base::message_out_of_band]
+[section:overload2 ssl::basic_context::use_private_key_file (2 of 2 overloads)]
 
-Process out-of-band data.
+Use a private key from a file.
 
- static const int message_out_of_band = implementation_defined;
+ boost::system::error_code use_private_key_file(
+ const std::string & filename,
+ file_format format,
+ boost::system::error_code & ec);
 
 
+This function is used to load a private key into the context from a file.
 
-[endsect]
 
+[heading Parameters]
+
 
+[variablelist
+
+[[filename][The name of the file containing the private key.]]
 
-[section:message_peek socket_base::message_peek]
+[[format][The file format (ASN.1 or PEM).]]
 
-Peek at incoming data without removing it from the input queue.
+[[ec][Set to indicate what error occurred, if any. ]]
 
- static const int message_peek = implementation_defined;
+]
 
 
 
 [endsect]
 
 
+[endsect]
 
-[section:non_blocking_io socket_base::non_blocking_io]
-
-IO control command to set the blocking mode of the socket.
+[section:use_rsa_private_key_file ssl::basic_context::use_rsa_private_key_file]
 
- typedef implementation_defined non_blocking_io;
+Use an RSA private key from a file.
 
+ void ``[link boost_asio.reference.ssl__basic_context.use_rsa_private_key_file.overload1 use_rsa_private_key_file]``(
+ const std::string & filename,
+ file_format format);
 
+ boost::system::error_code ``[link boost_asio.reference.ssl__basic_context.use_rsa_private_key_file.overload2 use_rsa_private_key_file]``(
+ const std::string & filename,
+ file_format format,
+ boost::system::error_code & ec);
 
-Implements the FIONBIO IO control command.
 
+[section:overload1 ssl::basic_context::use_rsa_private_key_file (1 of 2 overloads)]
 
-[heading Example]
-
+Use an RSA private key from a file.
 
+ void use_rsa_private_key_file(
+ const std::string & filename,
+ file_format format);
 
- boost::asio::ip::tcp::socket socket(io_service);
- ...
- boost::asio::socket_base::non_blocking_io command(true);
- socket.io_control(command);
 
+This function is used to load an RSA private key into the context from a file.
 
 
+[heading Parameters]
+
 
+[variablelist
+
+[[filename][The name of the file containing the RSA private key.]]
 
+[[format][The file format (ASN.1 or PEM).]]
 
-[endsect]
+]
 
+[heading Exceptions]
+
 
+[variablelist
+
+[[boost::system::system_error][Thrown on failure. ]]
 
-[section:receive_buffer_size socket_base::receive_buffer_size]
+]
 
-Socket option for the receive buffer size of a socket.
 
- typedef implementation_defined receive_buffer_size;
 
+[endsect]
 
 
-Implements the SOL\_SOCKET/SO\_RCVBUF socket option.
 
+[section:overload2 ssl::basic_context::use_rsa_private_key_file (2 of 2 overloads)]
 
-[heading Examples]
-
-Setting the option:
+Use an RSA private key from a file.
 
- boost::asio::ip::tcp::socket socket(io_service);
- ...
- boost::asio::socket_base::receive_buffer_size option(8192);
- socket.set_option(option);
+ boost::system::error_code use_rsa_private_key_file(
+ const std::string & filename,
+ file_format format,
+ boost::system::error_code & ec);
 
 
+This function is used to load an RSA private key into the context from a file.
 
 
-Getting the current option value:
+[heading Parameters]
+
 
- boost::asio::ip::tcp::socket socket(io_service);
- ...
- boost::asio::socket_base::receive_buffer_size option;
- socket.get_option(option);
- int size = option.value();
+[variablelist
+
+[[filename][The name of the file containing the RSA private key.]]
 
+[[format][The file format (ASN.1 or PEM).]]
 
+[[ec][Set to indicate what error occurred, if any. ]]
 
+]
 
 
 
 [endsect]
 
 
+[endsect]
 
-[section:receive_low_watermark socket_base::receive_low_watermark]
+[section:use_tmp_dh_file ssl::basic_context::use_tmp_dh_file]
 
-Socket option for the receive low watermark.
+Use the specified file to obtain the temporary Diffie-Hellman parameters.
 
- typedef implementation_defined receive_low_watermark;
+ void ``[link boost_asio.reference.ssl__basic_context.use_tmp_dh_file.overload1 use_tmp_dh_file]``(
+ const std::string & filename);
 
+ boost::system::error_code ``[link boost_asio.reference.ssl__basic_context.use_tmp_dh_file.overload2 use_tmp_dh_file]``(
+ const std::string & filename,
+ boost::system::error_code & ec);
 
 
-Implements the SOL\_SOCKET/SO\_RCVLOWAT socket option.
+[section:overload1 ssl::basic_context::use_tmp_dh_file (1 of 2 overloads)]
 
+Use the specified file to obtain the temporary Diffie-Hellman parameters.
 
-[heading Examples]
-
-Setting the option:
+ void use_tmp_dh_file(
+ const std::string & filename);
 
- boost::asio::ip::tcp::socket socket(io_service);
- ...
- boost::asio::socket_base::receive_low_watermark option(1024);
- socket.set_option(option);
 
+This function is used to load Diffie-Hellman parameters into the context from a file.
 
 
+[heading Parameters]
+
 
-Getting the current option value:
+[variablelist
+
+[[filename][The name of the file containing the Diffie-Hellman parameters. The file must use the PEM format.]]
 
- boost::asio::ip::tcp::socket socket(io_service);
- ...
- boost::asio::socket_base::receive_low_watermark option;
- socket.get_option(option);
- int size = option.value();
+]
 
+[heading Exceptions]
+
 
+[variablelist
+
+[[boost::system::system_error][Thrown on failure. ]]
 
+]
 
 
 
@@ -33620,151 +41474,118 @@
 
 
 
-[section:reuse_address socket_base::reuse_address]
+[section:overload2 ssl::basic_context::use_tmp_dh_file (2 of 2 overloads)]
 
-Socket option to allow the socket to be bound to an address that is already in use.
+Use the specified file to obtain the temporary Diffie-Hellman parameters.
 
- typedef implementation_defined reuse_address;
+ boost::system::error_code use_tmp_dh_file(
+ const std::string & filename,
+ boost::system::error_code & ec);
 
 
+This function is used to load Diffie-Hellman parameters into the context from a file.
 
-Implements the SOL\_SOCKET/SO\_REUSEADDR socket option.
 
+[heading Parameters]
+
 
-[heading Examples]
+[variablelist
   
-Setting the option:
-
- boost::asio::ip::tcp::acceptor acceptor(io_service);
- ...
- boost::asio::socket_base::reuse_address option(true);
- acceptor.set_option(option);
-
-
-
-
-Getting the current option value:
+[[filename][The name of the file containing the Diffie-Hellman parameters. The file must use the PEM format.]]
 
- boost::asio::ip::tcp::acceptor acceptor(io_service);
- ...
- boost::asio::socket_base::reuse_address option;
- acceptor.get_option(option);
- bool is_set = option.value();
+[[ec][Set to indicate what error occurred, if any. ]]
 
+]
 
 
 
+[endsect]
 
 
 [endsect]
 
 
+[section:verify_client_once ssl::basic_context::verify_client_once]
 
-[section:send_buffer_size socket_base::send_buffer_size]
 
-Socket option for the send buffer size of a socket.
+['Inherited from ssl::context_base.]
 
- typedef implementation_defined send_buffer_size;
+Do not request client certificate on renegotiation. Ignored unless verify_peer is set.
 
+ static const int verify_client_once = implementation_defined;
 
 
-Implements the SOL\_SOCKET/SO\_SNDBUF socket option.
 
+[endsect]
 
-[heading Examples]
-
-Setting the option:
 
- boost::asio::ip::tcp::socket socket(io_service);
- ...
- boost::asio::socket_base::send_buffer_size option(8192);
- socket.set_option(option);
 
+[section:verify_fail_if_no_peer_cert ssl::basic_context::verify_fail_if_no_peer_cert]
 
 
+['Inherited from ssl::context_base.]
 
-Getting the current option value:
+Fail verification if the peer has no certificate. Ignored unless verify_peer is set.
 
- boost::asio::ip::tcp::socket socket(io_service);
- ...
- boost::asio::socket_base::send_buffer_size option;
- socket.get_option(option);
- int size = option.value();
+ static const int verify_fail_if_no_peer_cert = implementation_defined;
 
 
 
+[endsect]
 
 
 
-[endsect]
+[section:verify_mode ssl::basic_context::verify_mode]
 
 
+['Inherited from ssl::context_base.]
 
-[section:send_low_watermark socket_base::send_low_watermark]
+Bitmask type for peer verification.
 
-Socket option for the send low watermark.
+ typedef int verify_mode;
 
- typedef implementation_defined send_low_watermark;
 
 
 
-Implements the SOL\_SOCKET/SO\_SNDLOWAT socket option.
+[endsect]
 
 
-[heading Examples]
-
-Setting the option:
 
- boost::asio::ip::tcp::socket socket(io_service);
- ...
- boost::asio::socket_base::send_low_watermark option(1024);
- socket.set_option(option);
+[section:verify_none ssl::basic_context::verify_none]
 
 
+['Inherited from ssl::context_base.]
 
+No verification.
 
-Getting the current option value:
+ static const int verify_none = implementation_defined;
 
- boost::asio::ip::tcp::socket socket(io_service);
- ...
- boost::asio::socket_base::send_low_watermark option;
- socket.get_option(option);
- int size = option.value();
 
 
+[endsect]
 
 
 
+[section:verify_peer ssl::basic_context::verify_peer]
 
-[endsect]
 
+['Inherited from ssl::context_base.]
 
+Verify the peer.
 
-[section:shutdown_type socket_base::shutdown_type]
+ static const int verify_peer = implementation_defined;
 
-Different ways a socket may be shutdown.
 
- enum shutdown_type
 
-[heading Values]
-[variablelist
+[endsect]
 
- [
- [shutdown_receive]
- [Shutdown the receive side of the socket. ]
- ]
 
- [
- [shutdown_send]
- [Shutdown the send side of the socket. ]
- ]
 
- [
- [shutdown_both]
- [Shutdown both send and receive on the socket. ]
- ]
+[section:_basic_context ssl::basic_context::~basic_context]
 
-]
+Destructor.
+
+ ~basic_context();
 
 
 
@@ -33774,14 +41595,12 @@
 
 [endsect]
 
-[section:ssl__basic_context ssl::basic_context]
 
-SSL context.
+[section:ssl__context ssl::context]
 
- template<
- typename ``[link boost_asio.reference.Service Service]``>
- class basic_context :
- public ssl::context_base
+Typedef for the typical usage of context.
+
+ typedef basic_context< context_service > context;
 
 
 [heading Types]
@@ -33961,73 +41780,152 @@
 
 ]
 
-[section:add_verify_path ssl::basic_context::add_verify_path]
 
-Add a directory containing certificate authority files to be used for performing verification.
 
- void ``[link boost_asio.reference.ssl__basic_context.add_verify_path.overload1 add_verify_path]``(
- const std::string & path);
+[endsect]
 
- boost::system::error_code ``[link boost_asio.reference.ssl__basic_context.add_verify_path.overload2 add_verify_path]``(
- const std::string & path,
- boost::system::error_code & ec);
 
+[section:ssl__context_base ssl::context_base]
 
-[section:overload1 ssl::basic_context::add_verify_path (1 of 2 overloads)]
+The context_base class is used as a base for the basic_context class template so that we have a common place to define various enums.
 
-Add a directory containing certificate authority files to be used for performing verification.
+ class context_base
 
- void add_verify_path(
- const std::string & path);
 
+[heading Types]
+[table
+ [[Name][Description]]
+
+ [
 
-This function is used to specify the name of a directory containing certification authority certificates. Each file in the directory must contain a single certificate. The files must be named using the subject name's hash and an extension of ".0".
+ [[link boost_asio.reference.ssl__context_base.file_format [*file_format]]]
+ [File format types. ]
+
+ ]
 
+ [
 
-[heading Parameters]
-
+ [[link boost_asio.reference.ssl__context_base.method [*method]]]
+ [Different methods supported by a context. ]
+
+ ]
 
-[variablelist
+ [
+
+ [[link boost_asio.reference.ssl__context_base.options [*options]]]
+ [Bitmask type for SSL options. ]
   
-[[path][The name of a directory containing the certificates.]]
+ ]
+
+ [
+
+ [[link boost_asio.reference.ssl__context_base.password_purpose [*password_purpose]]]
+ [Purpose of PEM password. ]
+
+ ]
+
+ [
+
+ [[link boost_asio.reference.ssl__context_base.verify_mode [*verify_mode]]]
+ [Bitmask type for peer verification. ]
+
+ ]
 
 ]
 
-[heading Exceptions]
-
+[heading Protected Member Functions]
+[table
+ [[Name][Description]]
 
-[variablelist
+ [
+ [[link boost_asio.reference.ssl__context_base._context_base [*~context_base]]]
+ [Protected destructor to prevent deletion through this type. ]
+ ]
   
-[[boost::system::system_error][Thrown on failure. ]]
+]
+
+[heading Data Members]
+[table
+ [[Name][Description]]
+
+ [
+ [[link boost_asio.reference.ssl__context_base.default_workarounds [*default_workarounds]]]
+ [Implement various bug workarounds. ]
+ ]
+
+ [
+ [[link boost_asio.reference.ssl__context_base.no_sslv2 [*no_sslv2]]]
+ [Disable SSL v2. ]
+ ]
+
+ [
+ [[link boost_asio.reference.ssl__context_base.no_sslv3 [*no_sslv3]]]
+ [Disable SSL v3. ]
+ ]
+
+ [
+ [[link boost_asio.reference.ssl__context_base.no_tlsv1 [*no_tlsv1]]]
+ [Disable TLS v1. ]
+ ]
+
+ [
+ [[link boost_asio.reference.ssl__context_base.single_dh_use [*single_dh_use]]]
+ [Always create a new key when using tmp_dh parameters. ]
+ ]
+
+ [
+ [[link boost_asio.reference.ssl__context_base.verify_client_once [*verify_client_once]]]
+ [Do not request client certificate on renegotiation. Ignored unless verify_peer is set. ]
+ ]
+
+ [
+ [[link boost_asio.reference.ssl__context_base.verify_fail_if_no_peer_cert [*verify_fail_if_no_peer_cert]]]
+ [Fail verification if the peer has no certificate. Ignored unless verify_peer is set. ]
+ ]
+
+ [
+ [[link boost_asio.reference.ssl__context_base.verify_none [*verify_none]]]
+ [No verification. ]
+ ]
+
+ [
+ [[link boost_asio.reference.ssl__context_base.verify_peer [*verify_peer]]]
+ [Verify the peer. ]
+ ]
 
 ]
 
 
+[section:default_workarounds ssl::context_base::default_workarounds]
 
-[endsect]
+Implement various bug workarounds.
 
+ static const int default_workarounds = implementation_defined;
 
 
-[section:overload2 ssl::basic_context::add_verify_path (2 of 2 overloads)]
 
-Add a directory containing certificate authority files to be used for performing verification.
+[endsect]
 
- boost::system::error_code add_verify_path(
- const std::string & path,
- boost::system::error_code & ec);
 
 
-This function is used to specify the name of a directory containing certification authority certificates. Each file in the directory must contain a single certificate. The files must be named using the subject name's hash and an extension of ".0".
+[section:file_format ssl::context_base::file_format]
 
+File format types.
 
-[heading Parameters]
-
+ enum file_format
 
+[heading Values]
 [variablelist
-
-[[path][The name of a directory containing the certificates.]]
 
-[[ec][Set to indicate what error occurred, if any. ]]
+ [
+ [asn1]
+ [ASN.1 file. ]
+ ]
+
+ [
+ [pem]
+ [PEM file. ]
+ ]
 
 ]
 
@@ -34036,16 +41934,89 @@
 [endsect]
 
 
+
+[section:method ssl::context_base::method]
+
+Different methods supported by a context.
+
+ enum method
+
+[heading Values]
+[variablelist
+
+ [
+ [sslv2]
+ [Generic SSL version 2. ]
+ ]
+
+ [
+ [sslv2_client]
+ [SSL version 2 client. ]
+ ]
+
+ [
+ [sslv2_server]
+ [SSL version 2 server. ]
+ ]
+
+ [
+ [sslv3]
+ [Generic SSL version 3. ]
+ ]
+
+ [
+ [sslv3_client]
+ [SSL version 3 client. ]
+ ]
+
+ [
+ [sslv3_server]
+ [SSL version 3 server. ]
+ ]
+
+ [
+ [tlsv1]
+ [Generic TLS version 1. ]
+ ]
+
+ [
+ [tlsv1_client]
+ [TLS version 1 client. ]
+ ]
+
+ [
+ [tlsv1_server]
+ [TLS version 1 server. ]
+ ]
+
+ [
+ [sslv23]
+ [Generic SSL/TLS. ]
+ ]
+
+ [
+ [sslv23_client]
+ [SSL/TLS client. ]
+ ]
+
+ [
+ [sslv23_server]
+ [SSL/TLS server. ]
+ ]
+
+]
+
+
+
 [endsect]
 
 
-[section:basic_context ssl::basic_context::basic_context]
 
-Constructor.
+[section:no_sslv2 ssl::context_base::no_sslv2]
 
- basic_context(
- boost::asio::io_service & io_service,
- method m);
+Disable SSL v2.
+
+ static const int no_sslv2 = implementation_defined;
 
 
 
@@ -34053,14 +42024,23 @@
 
 
 
-[section:default_workarounds ssl::basic_context::default_workarounds]
+[section:no_sslv3 ssl::context_base::no_sslv3]
 
+Disable SSL v3.
 
-['Inherited from ssl::context_base.]
+ static const int no_sslv3 = implementation_defined;
 
-Implement various bug workarounds.
 
- static const int default_workarounds = implementation_defined;
+
+[endsect]
+
+
+
+[section:no_tlsv1 ssl::context_base::no_tlsv1]
+
+Disable TLS v1.
+
+ static const int no_tlsv1 = implementation_defined;
 
 
 
@@ -34068,26 +42048,36 @@
 
 
 
-[section:file_format ssl::basic_context::file_format]
+[section:options ssl::context_base::options]
 
+Bitmask type for SSL options.
 
-['Inherited from ssl::context_base.]
+ typedef int options;
 
-File format types.
 
- enum file_format
+
+
+[endsect]
+
+
+
+[section:password_purpose ssl::context_base::password_purpose]
+
+Purpose of PEM password.
+
+ enum password_purpose
 
 [heading Values]
 [variablelist
 
   [
- [asn1]
- [ASN.1 file. ]
+ [for_reading]
+ [The password is needed for reading/decryption. ]
   ]
 
   [
- [pem]
- [PEM file. ]
+ [for_writing]
+ [The password is needed for writing/encryption. ]
   ]
 
 ]
@@ -34098,72 +42088,60 @@
 
 
 
-[section:impl ssl::basic_context::impl]
-
-Get the underlying implementation in the native type.
+[section:single_dh_use ssl::context_base::single_dh_use]
 
- impl_type impl();
+Always create a new key when using tmp_dh parameters.
 
+ static const int single_dh_use = implementation_defined;
 
-This function may be used to obtain the underlying implementation of the context. This is intended to allow access to context functionality that is not otherwise provided.
 
 
 [endsect]
 
 
 
-[section:impl_type ssl::basic_context::impl_type]
-
-The native implementation type of the locking dispatcher.
+[section:verify_client_once ssl::context_base::verify_client_once]
 
- typedef service_type::impl_type impl_type;
+Do not request client certificate on renegotiation. Ignored unless verify_peer is set.
 
+ static const int verify_client_once = implementation_defined;
 
 
 
 [endsect]
 
 
-[section:load_verify_file ssl::basic_context::load_verify_file]
 
-Load a certification authority file for performing verification.
+[section:verify_fail_if_no_peer_cert ssl::context_base::verify_fail_if_no_peer_cert]
 
- void ``[link boost_asio.reference.ssl__basic_context.load_verify_file.overload1 load_verify_file]``(
- const std::string & filename);
+Fail verification if the peer has no certificate. Ignored unless verify_peer is set.
 
- boost::system::error_code ``[link boost_asio.reference.ssl__basic_context.load_verify_file.overload2 load_verify_file]``(
- const std::string & filename,
- boost::system::error_code & ec);
+ static const int verify_fail_if_no_peer_cert = implementation_defined;
 
 
-[section:overload1 ssl::basic_context::load_verify_file (1 of 2 overloads)]
 
-Load a certification authority file for performing verification.
+[endsect]
 
- void load_verify_file(
- const std::string & filename);
 
 
-This function is used to load one or more trusted certification authorities from a file.
+[section:verify_mode ssl::context_base::verify_mode]
 
+Bitmask type for peer verification.
 
-[heading Parameters]
-
+ typedef int verify_mode;
 
-[variablelist
-
-[[filename][The name of a file containing certification authority certificates in PEM format.]]
 
-]
 
-[heading Exceptions]
-
 
-[variablelist
-
-[[boost::system::system_error][Thrown on failure. ]]
+[endsect]
 
-]
+
+
+[section:verify_none ssl::context_base::verify_none]
+
+No verification.
+
+ static const int verify_none = implementation_defined;
 
 
 
@@ -34171,140 +42149,191 @@
 
 
 
-[section:overload2 ssl::basic_context::load_verify_file (2 of 2 overloads)]
+[section:verify_peer ssl::context_base::verify_peer]
 
-Load a certification authority file for performing verification.
+Verify the peer.
+
+ static const int verify_peer = implementation_defined;
 
- boost::system::error_code load_verify_file(
- const std::string & filename,
- boost::system::error_code & ec);
 
 
-This function is used to load the certificates for one or more trusted certification authorities from a file.
+[endsect]
 
 
-[heading Parameters]
-
 
-[variablelist
-
-[[filename][The name of a file containing certification authority certificates in PEM format.]]
+[section:_context_base ssl::context_base::~context_base]
 
-[[ec][Set to indicate what error occurred, if any. ]]
+Protected destructor to prevent deletion through this type.
 
-]
+ ~context_base();
 
 
 
 [endsect]
 
 
+
 [endsect]
 
+[section:ssl__context_service ssl::context_service]
 
-[section:method ssl::basic_context::method]
+Default service implementation for a context.
 
+ class context_service :
+ public io_service::service
 
-['Inherited from ssl::context_base.]
 
-Different methods supported by a context.
+[heading Types]
+[table
+ [[Name][Description]]
 
- enum method
+ [
 
-[heading Values]
-[variablelist
+ [[link boost_asio.reference.ssl__context_service.impl_type [*impl_type]]]
+ [The type of the context. ]
+
+ ]
+
+]
+
+[heading Member Functions]
+[table
+ [[Name][Description]]
 
   [
- [sslv2]
- [Generic SSL version 2. ]
+ [[link boost_asio.reference.ssl__context_service.add_verify_path [*add_verify_path]]]
+ [Add a directory containing certification authority files to be used for performing verification. ]
   ]
-
+
   [
- [sslv2_client]
- [SSL version 2 client. ]
+ [[link boost_asio.reference.ssl__context_service.context_service [*context_service]]]
+ [Constructor. ]
   ]
-
+
   [
- [sslv2_server]
- [SSL version 2 server. ]
+ [[link boost_asio.reference.ssl__context_service.create [*create]]]
+ [Create a new context implementation. ]
   ]
-
+
   [
- [sslv3]
- [Generic SSL version 3. ]
+ [[link boost_asio.reference.ssl__context_service.destroy [*destroy]]]
+ [Destroy a context implementation. ]
   ]
-
+
   [
- [sslv3_client]
- [SSL version 3 client. ]
+ [[link boost_asio.reference.ssl__context_service.get_io_service [*get_io_service]]]
+ [Get the io_service object that owns the service. ]
   ]
-
+
   [
- [sslv3_server]
- [SSL version 3 server. ]
+ [[link boost_asio.reference.ssl__context_service.io_service [*io_service]]]
+ [(Deprecated: use get_io_service().) Get the io_service object that owns the service. ]
   ]
-
+
   [
- [tlsv1]
- [Generic TLS version 1. ]
+ [[link boost_asio.reference.ssl__context_service.load_verify_file [*load_verify_file]]]
+ [Load a certification authority file for performing verification. ]
   ]
-
+
   [
- [tlsv1_client]
- [TLS version 1 client. ]
+ [[link boost_asio.reference.ssl__context_service.null [*null]]]
+ [Return a null context implementation. ]
   ]
-
+
   [
- [tlsv1_server]
- [TLS version 1 server. ]
+ [[link boost_asio.reference.ssl__context_service.set_options [*set_options]]]
+ [Set options on the context. ]
   ]
-
+
   [
- [sslv23]
- [Generic SSL/TLS. ]
+ [[link boost_asio.reference.ssl__context_service.set_password_callback [*set_password_callback]]]
+ [Set the password callback. ]
   ]
-
+
   [
- [sslv23_client]
- [SSL/TLS client. ]
+ [[link boost_asio.reference.ssl__context_service.set_verify_mode [*set_verify_mode]]]
+ [Set peer verification mode. ]
+ ]
+
+ [
+ [[link boost_asio.reference.ssl__context_service.shutdown_service [*shutdown_service]]]
+ [Destroy all user-defined handler objects owned by the service. ]
+ ]
+
+ [
+ [[link boost_asio.reference.ssl__context_service.use_certificate_chain_file [*use_certificate_chain_file]]]
+ [Use a certificate chain from a file. ]
+ ]
+
+ [
+ [[link boost_asio.reference.ssl__context_service.use_certificate_file [*use_certificate_file]]]
+ [Use a certificate from a file. ]
+ ]
+
+ [
+ [[link boost_asio.reference.ssl__context_service.use_private_key_file [*use_private_key_file]]]
+ [Use a private key from a file. ]
+ ]
+
+ [
+ [[link boost_asio.reference.ssl__context_service.use_rsa_private_key_file [*use_rsa_private_key_file]]]
+ [Use an RSA private key from a file. ]
+ ]
+
+ [
+ [[link boost_asio.reference.ssl__context_service.use_tmp_dh_file [*use_tmp_dh_file]]]
+ [Use the specified file to obtain the temporary Diffie-Hellman parameters. ]
   ]
+
+]
+
+[heading Data Members]
+[table
+ [[Name][Description]]
 
   [
- [sslv23_server]
- [SSL/TLS server. ]
+ [[link boost_asio.reference.ssl__context_service.id [*id]]]
+ [The unique service identifier. ]
   ]
 
 ]
 
 
+[section:add_verify_path ssl::context_service::add_verify_path]
 
-[endsect]
+Add a directory containing certification authority files to be used for performing verification.
 
+ boost::system::error_code add_verify_path(
+ impl_type & impl,
+ const std::string & path,
+ boost::system::error_code & ec);
 
 
-[section:no_sslv2 ssl::basic_context::no_sslv2]
 
+[endsect]
 
-['Inherited from ssl::context_base.]
 
-Disable SSL v2.
 
- static const int no_sslv2 = implementation_defined;
+[section:context_service ssl::context_service::context_service]
 
+Constructor.
 
+ context_service(
+ boost::asio::io_service & io_service);
 
-[endsect]
 
 
+[endsect]
 
-[section:no_sslv3 ssl::basic_context::no_sslv3]
 
 
-['Inherited from ssl::context_base.]
+[section:create ssl::context_service::create]
 
-Disable SSL v3.
+Create a new context implementation.
 
- static const int no_sslv3 = implementation_defined;
+ void create(
+ impl_type & impl,
+ context_base::method m);
 
 
 
@@ -34312,60 +42341,52 @@
 
 
 
-[section:no_tlsv1 ssl::basic_context::no_tlsv1]
+[section:destroy ssl::context_service::destroy]
 
+Destroy a context implementation.
 
-['Inherited from ssl::context_base.]
+ void destroy(
+ impl_type & impl);
 
-Disable TLS v1.
 
- static const int no_tlsv1 = implementation_defined;
 
+[endsect]
 
 
-[endsect]
 
+[section:get_io_service ssl::context_service::get_io_service]
 
 
-[section:options ssl::basic_context::options]
+['Inherited from io_service.]
 
+Get the io_service object that owns the service.
 
-['Inherited from ssl::context_base.]
+ boost::asio::io_service & get_io_service();
 
-Bitmask type for SSL options.
 
- typedef int options;
 
+[endsect]
 
 
 
-[endsect]
+[section:id ssl::context_service::id]
 
+The unique service identifier.
 
+ static boost::asio::io_service::id id;
 
-[section:password_purpose ssl::basic_context::password_purpose]
 
 
-['Inherited from ssl::context_base.]
+[endsect]
 
-Purpose of PEM password.
 
- enum password_purpose
 
-[heading Values]
-[variablelist
+[section:impl_type ssl::context_service::impl_type]
 
- [
- [for_reading]
- [The password is needed for reading/decryption. ]
- ]
+The type of the context.
 
- [
- [for_writing]
- [The password is needed for writing/encryption. ]
- ]
+ typedef implementation_defined impl_type;
 
-]
 
 
 
@@ -34373,58 +42394,56 @@
 
 
 
-[section:service_type ssl::basic_context::service_type]
+[section:io_service ssl::context_service::io_service]
 
-The type of the service that will be used to provide context operations.
 
- typedef Service service_type;
+['Inherited from io_service.]
+
+(Deprecated: use get_io_service().) Get the io_service object that owns the service.
 
+ boost::asio::io_service & io_service();
 
 
 
 [endsect]
 
 
-[section:set_options ssl::basic_context::set_options]
 
-Set options on the context.
+[section:load_verify_file ssl::context_service::load_verify_file]
 
- void ``[link boost_asio.reference.ssl__basic_context.set_options.overload1 set_options]``(
- options o);
+Load a certification authority file for performing verification.
 
- boost::system::error_code ``[link boost_asio.reference.ssl__basic_context.set_options.overload2 set_options]``(
- options o,
+ boost::system::error_code load_verify_file(
+ impl_type & impl,
+ const std::string & filename,
       boost::system::error_code & ec);
 
 
-[section:overload1 ssl::basic_context::set_options (1 of 2 overloads)]
 
-Set options on the context.
+[endsect]
 
- void set_options(
- options o);
 
 
-This function may be used to configure the SSL options used by the context.
+[section:null ssl::context_service::null]
 
+Return a null context implementation.
 
-[heading Parameters]
-
+ impl_type null() const;
 
-[variablelist
-
-[[o][A bitmask of options. The available option values are defined in the context\_base class. The options are bitwise-ored with any existing value for the options.]]
 
-]
 
-[heading Exceptions]
-
+[endsect]
 
-[variablelist
-
-[[boost::system::system_error][Thrown on failure. ]]
 
-]
+
+[section:set_options ssl::context_service::set_options]
+
+Set options on the context.
+
+ boost::system::error_code set_options(
+ impl_type & impl,
+ context_base::options o,
+ boost::system::error_code & ec);
 
 
 
@@ -34432,90 +42451,90 @@
 
 
 
-[section:overload2 ssl::basic_context::set_options (2 of 2 overloads)]
+[section:set_password_callback ssl::context_service::set_password_callback]
 
-Set options on the context.
+Set the password callback.
 
- boost::system::error_code set_options(
- options o,
+ template<
+ typename PasswordCallback>
+ boost::system::error_code set_password_callback(
+ impl_type & impl,
+ PasswordCallback callback,
       boost::system::error_code & ec);
 
 
-This function may be used to configure the SSL options used by the context.
 
+[endsect]
 
-[heading Parameters]
-
 
-[variablelist
-
-[[o][A bitmask of options. The available option values are defined in the context\_base class. The options are bitwise-ored with any existing value for the options.]]
 
-[[ec][Set to indicate what error occurred, if any. ]]
+[section:set_verify_mode ssl::context_service::set_verify_mode]
 
-]
+Set peer verification mode.
+
+ boost::system::error_code set_verify_mode(
+ impl_type & impl,
+ context_base::verify_mode v,
+ boost::system::error_code & ec);
 
 
 
 [endsect]
 
 
+
+[section:shutdown_service ssl::context_service::shutdown_service]
+
+Destroy all user-defined handler objects owned by the service.
+
+ void shutdown_service();
+
+
+
 [endsect]
 
-[section:set_password_callback ssl::basic_context::set_password_callback]
 
-Set the password callback.
 
- template<
- typename PasswordCallback>
- void ``[link boost_asio.reference.ssl__basic_context.set_password_callback.overload1 set_password_callback]``(
- PasswordCallback callback);
+[section:use_certificate_chain_file ssl::context_service::use_certificate_chain_file]
 
- template<
- typename PasswordCallback>
- boost::system::error_code ``[link boost_asio.reference.ssl__basic_context.set_password_callback.overload2 set_password_callback]``(
- PasswordCallback callback,
+Use a certificate chain from a file.
+
+ boost::system::error_code use_certificate_chain_file(
+ impl_type & impl,
+ const std::string & filename,
       boost::system::error_code & ec);
 
 
-[section:overload1 ssl::basic_context::set_password_callback (1 of 2 overloads)]
 
-Set the password callback.
+[endsect]
 
- template<
- typename PasswordCallback>
- void set_password_callback(
- PasswordCallback callback);
 
 
-This function is used to specify a callback function to obtain password information about an encrypted key in PEM format.
+[section:use_certificate_file ssl::context_service::use_certificate_file]
 
+Use a certificate from a file.
 
-[heading Parameters]
-
+ boost::system::error_code use_certificate_file(
+ impl_type & impl,
+ const std::string & filename,
+ context_base::file_format format,
+ boost::system::error_code & ec);
 
-[variablelist
-
-[[callback][The function object to be used for obtaining the password. The function signature of the handler must be:
-``
- std::string password_callback(
- std::size_t max_length, // The maximum size for a password.
- password_purpose purpose // Whether password is for reading or writing.
- );
 
-``
-The return value of the callback is a string containing the password.]]
 
-]
+[endsect]
 
-[heading Exceptions]
-
 
-[variablelist
-
-[[boost::system::system_error][Thrown on failure. ]]
 
-]
+[section:use_private_key_file ssl::context_service::use_private_key_file]
+
+Use a private key from a file.
+
+ boost::system::error_code use_private_key_file(
+ impl_type & impl,
+ const std::string & filename,
+ context_base::file_format format,
+ boost::system::error_code & ec);
 
 
 
@@ -34523,103 +42542,216 @@
 
 
 
-[section:overload2 ssl::basic_context::set_password_callback (2 of 2 overloads)]
+[section:use_rsa_private_key_file ssl::context_service::use_rsa_private_key_file]
 
-Set the password callback.
+Use an RSA private key from a file.
 
- template<
- typename PasswordCallback>
- boost::system::error_code set_password_callback(
- PasswordCallback callback,
+ boost::system::error_code use_rsa_private_key_file(
+ impl_type & impl,
+ const std::string & filename,
+ context_base::file_format format,
       boost::system::error_code & ec);
 
 
-This function is used to specify a callback function to obtain password information about an encrypted key in PEM format.
 
+[endsect]
 
-[heading Parameters]
-
 
-[variablelist
-
-[[callback][The function object to be used for obtaining the password. The function signature of the handler must be:
-``
- std::string password_callback(
- std::size_t max_length, // The maximum size for a password.
- password_purpose purpose // Whether password is for reading or writing.
- );
 
-``
-The return value of the callback is a string containing the password.]]
+[section:use_tmp_dh_file ssl::context_service::use_tmp_dh_file]
 
-[[ec][Set to indicate what error occurred, if any. ]]
+Use the specified file to obtain the temporary Diffie-Hellman parameters.
 
-]
+ boost::system::error_code use_tmp_dh_file(
+ impl_type & impl,
+ const std::string & filename,
+ boost::system::error_code & ec);
 
 
 
 [endsect]
 
 
+
 [endsect]
 
-[section:set_verify_mode ssl::basic_context::set_verify_mode]
+[section:ssl__stream ssl::stream]
 
-Set the peer verification mode.
+Provides stream-oriented functionality using SSL.
 
- void ``[link boost_asio.reference.ssl__basic_context.set_verify_mode.overload1 set_verify_mode]``(
- verify_mode v);
+ template<
+ typename Stream,
+ typename ``[link boost_asio.reference.Service Service]`` = stream_service>
+ class stream :
+ public ssl::stream_base
 
- boost::system::error_code ``[link boost_asio.reference.ssl__basic_context.set_verify_mode.overload2 set_verify_mode]``(
- verify_mode v,
- boost::system::error_code & ec);
 
+[heading Types]
+[table
+ [[Name][Description]]
 
-[section:overload1 ssl::basic_context::set_verify_mode (1 of 2 overloads)]
+ [
 
-Set the peer verification mode.
+ [[link boost_asio.reference.ssl__stream.handshake_type [*handshake_type]]]
+ [Different handshake types. ]
+
+ ]
 
- void set_verify_mode(
- verify_mode v);
+ [
 
+ [[link boost_asio.reference.ssl__stream.impl_type [*impl_type]]]
+ [The native implementation type of the stream. ]
+
+ ]
 
-This function may be used to configure the peer verification mode used by the context.
+ [
+
+ [[link boost_asio.reference.ssl__stream.lowest_layer_type [*lowest_layer_type]]]
+ [The type of the lowest layer. ]
+
+ ]
+
+ [
+
+ [[link boost_asio.reference.ssl__stream.next_layer_type [*next_layer_type]]]
+ [The type of the next layer. ]
+
+ ]
+
+ [
+
+ [[link boost_asio.reference.ssl__stream.service_type [*service_type]]]
+ [The type of the service that will be used to provide stream operations. ]
+
+ ]
+
+]
+
+[heading Member Functions]
+[table
+ [[Name][Description]]
+
+ [
+ [[link boost_asio.reference.ssl__stream.async_handshake [*async_handshake]]]
+ [Start an asynchronous SSL handshake. ]
+ ]
+
+ [
+ [[link boost_asio.reference.ssl__stream.async_read_some [*async_read_some]]]
+ [Start an asynchronous read. ]
+ ]
+
+ [
+ [[link boost_asio.reference.ssl__stream.async_shutdown [*async_shutdown]]]
+ [Asynchronously shut down SSL on the stream. ]
+ ]
+
+ [
+ [[link boost_asio.reference.ssl__stream.async_write_some [*async_write_some]]]
+ [Start an asynchronous write. ]
+ ]
+
+ [
+ [[link boost_asio.reference.ssl__stream.get_io_service [*get_io_service]]]
+ [Get the io_service associated with the object. ]
+ ]
+
+ [
+ [[link boost_asio.reference.ssl__stream.handshake [*handshake]]]
+ [Perform SSL handshaking. ]
+ ]
+
+ [
+ [[link boost_asio.reference.ssl__stream.impl [*impl]]]
+ [Get the underlying implementation in the native type. ]
+ ]
+
+ [
+ [[link boost_asio.reference.ssl__stream.in_avail [*in_avail]]]
+ [Determine the amount of data that may be read without blocking. ]
+ ]
+
+ [
+ [[link boost_asio.reference.ssl__stream.io_service [*io_service]]]
+ [(Deprecated: use get_io_service().) Get the io_service associated with the object. ]
+ ]
+
+ [
+ [[link boost_asio.reference.ssl__stream.lowest_layer [*lowest_layer]]]
+ [Get a reference to the lowest layer. ]
+ ]
+
+ [
+ [[link boost_asio.reference.ssl__stream.next_layer [*next_layer]]]
+ [Get a reference to the next layer. ]
+ ]
+
+ [
+ [[link boost_asio.reference.ssl__stream.peek [*peek]]]
+ [Peek at the incoming data on the stream. ]
+ ]
+
+ [
+ [[link boost_asio.reference.ssl__stream.read_some [*read_some]]]
+ [Read some data from the stream. ]
+ ]
+
+ [
+ [[link boost_asio.reference.ssl__stream.shutdown [*shutdown]]]
+ [Shut down SSL on the stream. ]
+ ]
+
+ [
+ [[link boost_asio.reference.ssl__stream.stream [*stream]]]
+ [Construct a stream. ]
+ ]
+
+ [
+ [[link boost_asio.reference.ssl__stream.write_some [*write_some]]]
+ [Write some data to the stream. ]
+ ]
+
+ [
+ [[link boost_asio.reference.ssl__stream._stream [*~stream]]]
+ [Destructor. ]
+ ]
+
+]
 
+The stream class template provides asynchronous and blocking stream-oriented functionality using SSL.
 
-[heading Parameters]
-
 
-[variablelist
+[heading Thread Safety]
   
-[[v][A bitmask of peer verification modes. The available verify\_mode values are defined in the context\_base class.]]
-
-]
+[*Distinct] [*objects:] Safe.
 
-[heading Exceptions]
-
+[*Shared] [*objects:] Unsafe.
 
-[variablelist
+[heading Example]
   
-[[boost::system::system_error][Thrown on failure. ]]
+To use the SSL stream template with an ip::tcp::socket, you would write:
 
-]
+ boost::asio::io_service io_service;
+ boost::asio::ssl::context context(io_service, boost::asio::ssl::context::sslv23);
+ boost::asio::ssl::stream<boost::asio::ip::tcp::socket> sock(io_service, context);
 
 
 
-[endsect]
 
 
 
-[section:overload2 ssl::basic_context::set_verify_mode (2 of 2 overloads)]
+[section:async_handshake ssl::stream::async_handshake]
 
-Set the peer verification mode.
+Start an asynchronous SSL handshake.
 
- boost::system::error_code set_verify_mode(
- verify_mode v,
- boost::system::error_code & ec);
+ template<
+ typename HandshakeHandler>
+ void async_handshake(
+ handshake_type type,
+ HandshakeHandler handler);
 
 
-This function may be used to configure the peer verification mode used by the context.
+This function is used to asynchronously perform an SSL handshake on the stream. This function call always returns immediately.
 
 
 [heading Parameters]
@@ -34627,55 +42759,38 @@
 
 [variablelist
   
-[[v][A bitmask of peer verification modes. The available verify\_mode values are defined in the context\_base class.]]
-
-[[ec][Set to indicate what error occurred, if any. ]]
-
-]
-
-
-
-[endsect]
-
-
-[endsect]
-
-
-[section:single_dh_use ssl::basic_context::single_dh_use]
-
+[[type][The type of handshaking to be performed, i.e. as a client or as a server.]]
 
-['Inherited from ssl::context_base.]
+[[handler][The handler to be called when the handshake operation completes. Copies will be made of the handler as required. The equivalent function signature of the handler must be:
+``
+ void handler(
+ const boost::system::error_code& error // Result of operation.
+ );
 
-Always create a new key when using tmp_dh parameters.
+``
+]]
 
- static const int single_dh_use = implementation_defined;
+]
 
 
 
 [endsect]
 
 
-[section:use_certificate_chain_file ssl::basic_context::use_certificate_chain_file]
-
-Use a certificate chain from a file.
-
- void ``[link boost_asio.reference.ssl__basic_context.use_certificate_chain_file.overload1 use_certificate_chain_file]``(
- const std::string & filename);
-
- boost::system::error_code ``[link boost_asio.reference.ssl__basic_context.use_certificate_chain_file.overload2 use_certificate_chain_file]``(
- const std::string & filename,
- boost::system::error_code & ec);
-
 
-[section:overload1 ssl::basic_context::use_certificate_chain_file (1 of 2 overloads)]
+[section:async_read_some ssl::stream::async_read_some]
 
-Use a certificate chain from a file.
+Start an asynchronous read.
 
- void use_certificate_chain_file(
- const std::string & filename);
+ template<
+ typename ``[link boost_asio.reference.MutableBufferSequence MutableBufferSequence]``,
+ typename ``[link boost_asio.reference.ReadHandler ReadHandler]``>
+ void async_read_some(
+ const MutableBufferSequence & buffers,
+ ReadHandler handler);
 
 
-This function is used to load a certificate chain into the context from a file.
+This function is used to asynchronously read one or more bytes of data from the stream. The function call always returns immediately.
 
 
 [heading Parameters]
@@ -34683,35 +42798,42 @@
 
 [variablelist
   
-[[filename][The name of the file containing the certificate. The file must use the PEM format.]]
-
-]
+[[buffers][The buffers into which the data will be read. Although the buffers object may be copied as necessary, ownership of the underlying buffers is retained by the caller, which must guarantee that they remain valid until the handler is called.]]
 
-[heading Exceptions]
-
+[[handler][The handler to be called when the read operation completes. Copies will be made of the handler as required. The equivalent function signature of the handler must be:
+``
+ void handler(
+ const boost::system::error_code& error, // Result of operation.
+ std::size_t bytes_transferred // Number of bytes read.
+ );
 
-[variablelist
-
-[[boost::system::system_error][Thrown on failure. ]]
+``
+]]
 
 ]
 
+[heading Remarks]
+
+The async\_read\_some operation may not read all of the requested number of bytes. Consider using the
+[link boost_asio.reference.async_read async_read] function if you need to ensure that the requested amount of data is read before the asynchronous operation completes.
+
 
 
 [endsect]
 
 
 
-[section:overload2 ssl::basic_context::use_certificate_chain_file (2 of 2 overloads)]
+[section:async_shutdown ssl::stream::async_shutdown]
 
-Use a certificate chain from a file.
+Asynchronously shut down SSL on the stream.
 
- boost::system::error_code use_certificate_chain_file(
- const std::string & filename,
- boost::system::error_code & ec);
+ template<
+ typename ShutdownHandler>
+ void async_shutdown(
+ ShutdownHandler handler);
 
 
-This function is used to load a certificate chain into the context from a file.
+This function is used to asynchronously shut down SSL on the stream. This function call always returns immediately.
 
 
 [heading Parameters]
@@ -34719,9 +42841,14 @@
 
 [variablelist
   
-[[filename][The name of the file containing the certificate. The file must use the PEM format.]]
+[[handler][The handler to be called when the handshake operation completes. Copies will be made of the handler as required. The equivalent function signature of the handler must be:
+``
+ void handler(
+ const boost::system::error_code& error // Result of operation.
+ );
 
-[[ec][Set to indicate what error occurred, if any. ]]
+``
+]]
 
 ]
 
@@ -34730,32 +42857,20 @@
 [endsect]
 
 
-[endsect]
-
-[section:use_certificate_file ssl::basic_context::use_certificate_file]
-
-Use a certificate from a file.
-
- void ``[link boost_asio.reference.ssl__basic_context.use_certificate_file.overload1 use_certificate_file]``(
- const std::string & filename,
- file_format format);
-
- boost::system::error_code ``[link boost_asio.reference.ssl__basic_context.use_certificate_file.overload2 use_certificate_file]``(
- const std::string & filename,
- file_format format,
- boost::system::error_code & ec);
-
 
-[section:overload1 ssl::basic_context::use_certificate_file (1 of 2 overloads)]
+[section:async_write_some ssl::stream::async_write_some]
 
-Use a certificate from a file.
+Start an asynchronous write.
 
- void use_certificate_file(
- const std::string & filename,
- file_format format);
+ template<
+ typename ``[link boost_asio.reference.ConstBufferSequence ConstBufferSequence]``,
+ typename ``[link boost_asio.reference.WriteHandler WriteHandler]``>
+ void async_write_some(
+ const ConstBufferSequence & buffers,
+ WriteHandler handler);
 
 
-This function is used to load a certificate into the context from a file.
+This function is used to asynchronously write one or more bytes of data to the stream. The function call always returns immediately.
 
 
 [heading Parameters]
@@ -34763,84 +42878,71 @@
 
 [variablelist
   
-[[filename][The name of the file containing the certificate.]]
-
-[[format][The file format (ASN.1 or PEM).]]
-
-]
+[[buffers][The data to be written to the stream. Although the buffers object may be copied as necessary, ownership of the underlying buffers is retained by the caller, which must guarantee that they remain valid until the handler is called.]]
 
-[heading Exceptions]
-
+[[handler][The handler to be called when the write operation completes. Copies will be made of the handler as required. The equivalent function signature of the handler must be:
+``
+ void handler(
+ const boost::system::error_code& error, // Result of operation.
+ std::size_t bytes_transferred // Number of bytes written.
+ );
 
-[variablelist
-
-[[boost::system::system_error][Thrown on failure. ]]
+``
+]]
 
 ]
 
+[heading Remarks]
+
+The async\_write\_some operation may not transmit all of the data to the peer. Consider using the
+[link boost_asio.reference.async_write async_write] function if you need to ensure that all data is written before the blocking operation completes.
 
 
-[endsect]
-
-
-
-[section:overload2 ssl::basic_context::use_certificate_file (2 of 2 overloads)]
 
-Use a certificate from a file.
+[endsect]
 
- boost::system::error_code use_certificate_file(
- const std::string & filename,
- file_format format,
- boost::system::error_code & ec);
 
 
-This function is used to load a certificate into the context from a file.
+[section:get_io_service ssl::stream::get_io_service]
 
+Get the io_service associated with the object.
 
-[heading Parameters]
-
+ boost::asio::io_service & get_io_service();
 
-[variablelist
-
-[[filename][The name of the file containing the certificate.]]
 
-[[format][The file format (ASN.1 or PEM).]]
+This function may be used to obtain the io_service object that the stream uses to dispatch handlers for asynchronous operations.
 
-[[ec][Set to indicate what error occurred, if any. ]]
 
-]
+[heading Return Value]
+
+A reference to the io_service object that stream will use to dispatch handlers. Ownership is not transferred to the caller.
 
 
 
 [endsect]
 
 
-[endsect]
-
-[section:use_private_key_file ssl::basic_context::use_private_key_file]
+[section:handshake ssl::stream::handshake]
 
-Use a private key from a file.
+Perform SSL handshaking.
 
- void ``[link boost_asio.reference.ssl__basic_context.use_private_key_file.overload1 use_private_key_file]``(
- const std::string & filename,
- file_format format);
+ void ``[link boost_asio.reference.ssl__stream.handshake.overload1 handshake]``(
+ handshake_type type);
 
- boost::system::error_code ``[link boost_asio.reference.ssl__basic_context.use_private_key_file.overload2 use_private_key_file]``(
- const std::string & filename,
- file_format format,
+ boost::system::error_code ``[link boost_asio.reference.ssl__stream.handshake.overload2 handshake]``(
+ handshake_type type,
       boost::system::error_code & ec);
 
 
-[section:overload1 ssl::basic_context::use_private_key_file (1 of 2 overloads)]
+[section:overload1 ssl::stream::handshake (1 of 2 overloads)]
 
-Use a private key from a file.
+Perform SSL handshaking.
 
- void use_private_key_file(
- const std::string & filename,
- file_format format);
+ void handshake(
+ handshake_type type);
 
 
-This function is used to load a private key into the context from a file.
+This function is used to perform SSL handshaking on the stream. The function call will block until handshaking is complete or an error occurs.
 
 
 [heading Parameters]
@@ -34848,9 +42950,7 @@
 
 [variablelist
   
-[[filename][The name of the file containing the private key.]]
-
-[[format][The file format (ASN.1 or PEM).]]
+[[type][The type of handshaking to be performed, i.e. as a client or as a server.]]
 
 ]
 
@@ -34869,17 +42969,16 @@
 
 
 
-[section:overload2 ssl::basic_context::use_private_key_file (2 of 2 overloads)]
+[section:overload2 ssl::stream::handshake (2 of 2 overloads)]
 
-Use a private key from a file.
+Perform SSL handshaking.
 
- boost::system::error_code use_private_key_file(
- const std::string & filename,
- file_format format,
+ boost::system::error_code handshake(
+ handshake_type type,
       boost::system::error_code & ec);
 
 
-This function is used to load a private key into the context from a file.
+This function is used to perform SSL handshaking on the stream. The function call will block until handshaking is complete or an error occurs.
 
 
 [heading Parameters]
@@ -34887,9 +42986,7 @@
 
 [variablelist
   
-[[filename][The name of the file containing the private key.]]
-
-[[format][The file format (ASN.1 or PEM).]]
+[[type][The type of handshaking to be performed, i.e. as a client or as a server.]]
 
 [[ec][Set to indicate what error occurred, if any. ]]
 
@@ -34902,49 +42999,25 @@
 
 [endsect]
 
-[section:use_rsa_private_key_file ssl::basic_context::use_rsa_private_key_file]
-
-Use an RSA private key from a file.
-
- void ``[link boost_asio.reference.ssl__basic_context.use_rsa_private_key_file.overload1 use_rsa_private_key_file]``(
- const std::string & filename,
- file_format format);
-
- boost::system::error_code ``[link boost_asio.reference.ssl__basic_context.use_rsa_private_key_file.overload2 use_rsa_private_key_file]``(
- const std::string & filename,
- file_format format,
- boost::system::error_code & ec);
-
-
-[section:overload1 ssl::basic_context::use_rsa_private_key_file (1 of 2 overloads)]
-
-Use an RSA private key from a file.
-
- void use_rsa_private_key_file(
- const std::string & filename,
- file_format format);
-
 
-This function is used to load an RSA private key into the context from a file.
+[section:handshake_type ssl::stream::handshake_type]
 
+Different handshake types.
 
-[heading Parameters]
-
+ enum handshake_type
 
+[heading Values]
 [variablelist
-
-[[filename][The name of the file containing the RSA private key.]]
-
-[[format][The file format (ASN.1 or PEM).]]
-
-]
 
-[heading Exceptions]
-
+ [
+ [client]
+ [Perform handshaking as a client. ]
+ ]
 
-[variablelist
-
-[[boost::system::system_error][Thrown on failure. ]]
+ [
+ [server]
+ [Perform handshaking as a server. ]
+ ]
 
 ]
 
@@ -34954,70 +43027,55 @@
 
 
 
-[section:overload2 ssl::basic_context::use_rsa_private_key_file (2 of 2 overloads)]
+[section:impl ssl::stream::impl]
 
-Use an RSA private key from a file.
+Get the underlying implementation in the native type.
 
- boost::system::error_code use_rsa_private_key_file(
- const std::string & filename,
- file_format format,
- boost::system::error_code & ec);
+ impl_type impl();
 
 
-This function is used to load an RSA private key into the context from a file.
+This function may be used to obtain the underlying implementation of the context. This is intended to allow access to stream functionality that is not otherwise provided.
 
 
-[heading Parameters]
-
+[endsect]
 
-[variablelist
-
-[[filename][The name of the file containing the RSA private key.]]
 
-[[format][The file format (ASN.1 or PEM).]]
 
-[[ec][Set to indicate what error occurred, if any. ]]
+[section:impl_type ssl::stream::impl_type]
 
-]
+The native implementation type of the stream.
 
+ typedef service_type::impl_type impl_type;
 
 
-[endsect]
 
 
 [endsect]
 
-[section:use_tmp_dh_file ssl::basic_context::use_tmp_dh_file]
-
-Use the specified file to obtain the temporary Diffie-Hellman parameters.
 
- void ``[link boost_asio.reference.ssl__basic_context.use_tmp_dh_file.overload1 use_tmp_dh_file]``(
- const std::string & filename);
+[section:in_avail ssl::stream::in_avail]
 
- boost::system::error_code ``[link boost_asio.reference.ssl__basic_context.use_tmp_dh_file.overload2 use_tmp_dh_file]``(
- const std::string & filename,
- boost::system::error_code & ec);
+Determine the amount of data that may be read without blocking.
 
+ std::size_t ``[link boost_asio.reference.ssl__stream.in_avail.overload1 in_avail]``();
 
-[section:overload1 ssl::basic_context::use_tmp_dh_file (1 of 2 overloads)]
+ std::size_t ``[link boost_asio.reference.ssl__stream.in_avail.overload2 in_avail]``(
+ boost::system::error_code & ec);
 
-Use the specified file to obtain the temporary Diffie-Hellman parameters.
 
- void use_tmp_dh_file(
- const std::string & filename);
+[section:overload1 ssl::stream::in_avail (1 of 2 overloads)]
 
+Determine the amount of data that may be read without blocking.
 
-This function is used to load Diffie-Hellman parameters into the context from a file.
+ std::size_t in_avail();
 
 
-[heading Parameters]
-
+This function is used to determine the amount of data, in bytes, that may be read from the stream without blocking.
 
-[variablelist
-
-[[filename][The name of the file containing the Diffie-Hellman parameters. The file must use the PEM format.]]
 
-]
+[heading Return Value]
+
+The number of bytes of data that can be read without blocking.
 
 [heading Exceptions]
     
@@ -35034,16 +43092,15 @@
 
 
 
-[section:overload2 ssl::basic_context::use_tmp_dh_file (2 of 2 overloads)]
+[section:overload2 ssl::stream::in_avail (2 of 2 overloads)]
 
-Use the specified file to obtain the temporary Diffie-Hellman parameters.
+Determine the amount of data that may be read without blocking.
 
- boost::system::error_code use_tmp_dh_file(
- const std::string & filename,
+ std::size_t in_avail(
       boost::system::error_code & ec);
 
 
-This function is used to load Diffie-Hellman parameters into the context from a file.
+This function is used to determine the amount of data, in bytes, that may be read from the stream without blocking.
 
 
 [heading Parameters]
@@ -35051,43 +43108,35 @@
 
 [variablelist
   
-[[filename][The name of the file containing the Diffie-Hellman parameters. The file must use the PEM format.]]
-
-[[ec][Set to indicate what error occurred, if any. ]]
+[[ec][Set to indicate what error occurred, if any.]]
 
 ]
 
+[heading Return Value]
+
+The number of bytes of data that can be read without blocking.
 
 
-[endsect]
-
 
 [endsect]
 
 
-[section:verify_client_once ssl::basic_context::verify_client_once]
-
-
-['Inherited from ssl::context_base.]
-
-Do not request client certificate on renegotiation. Ignored unless verify_peer is set.
-
- static const int verify_client_once = implementation_defined;
-
-
-
 [endsect]
 
 
+[section:io_service ssl::stream::io_service]
 
-[section:verify_fail_if_no_peer_cert ssl::basic_context::verify_fail_if_no_peer_cert]
+(Deprecated: use get_io_service().) Get the io_service associated with the object.
 
+ boost::asio::io_service & io_service();
 
-['Inherited from ssl::context_base.]
 
-Fail verification if the peer has no certificate. Ignored unless verify_peer is set.
+This function may be used to obtain the io_service object that the stream uses to dispatch handlers for asynchronous operations.
 
- static const int verify_fail_if_no_peer_cert = implementation_defined;
+
+[heading Return Value]
+
+A reference to the io_service object that stream will use to dispatch handlers. Ownership is not transferred to the caller.
 
 
 
@@ -35095,30 +43144,32 @@
 
 
 
-[section:verify_mode ssl::basic_context::verify_mode]
+[section:lowest_layer ssl::stream::lowest_layer]
 
+Get a reference to the lowest layer.
 
-['Inherited from ssl::context_base.]
+ lowest_layer_type & lowest_layer();
 
-Bitmask type for peer verification.
 
- typedef int verify_mode;
+This function returns a reference to the lowest layer in a stack of stream layers.
 
 
+[heading Return Value]
+
+A reference to the lowest layer in the stack of stream layers. Ownership is not transferred to the caller.
+
 
 
 [endsect]
 
 
 
-[section:verify_none ssl::basic_context::verify_none]
-
+[section:lowest_layer_type ssl::stream::lowest_layer_type]
 
-['Inherited from ssl::context_base.]
+The type of the lowest layer.
 
-No verification.
+ typedef next_layer_type::lowest_layer_type lowest_layer_type;
 
- static const int verify_none = implementation_defined;
 
 
 
@@ -35126,432 +43177,299 @@
 
 
 
-[section:verify_peer ssl::basic_context::verify_peer]
+[section:next_layer ssl::stream::next_layer]
 
+Get a reference to the next layer.
 
-['Inherited from ssl::context_base.]
+ next_layer_type & next_layer();
 
-Verify the peer.
 
- static const int verify_peer = implementation_defined;
+This function returns a reference to the next layer in a stack of stream layers.
 
 
+[heading Return Value]
+
+A reference to the next layer in the stack of stream layers. Ownership is not transferred to the caller.
 
-[endsect]
 
 
+[endsect]
 
-[section:_basic_context ssl::basic_context::~basic_context]
 
-Destructor.
 
- ~basic_context();
+[section:next_layer_type ssl::stream::next_layer_type]
 
+The type of the next layer.
 
+ typedef boost::remove_reference< Stream >::type next_layer_type;
 
-[endsect]
 
 
 
 [endsect]
 
 
-[section:ssl__context ssl::context]
-
-Typedef for the typical usage of context.
-
- typedef basic_context< context_service > context;
+[section:peek ssl::stream::peek]
 
+Peek at the incoming data on the stream.
 
-[heading Types]
-[table
- [[Name][Description]]
+ template<
+ typename ``[link boost_asio.reference.MutableBufferSequence MutableBufferSequence]``>
+ std::size_t ``[link boost_asio.reference.ssl__stream.peek.overload1 peek]``(
+ const MutableBufferSequence & buffers);
 
- [
+ template<
+ typename ``[link boost_asio.reference.MutableBufferSequence MutableBufferSequence]``>
+ std::size_t ``[link boost_asio.reference.ssl__stream.peek.overload2 peek]``(
+ const MutableBufferSequence & buffers,
+ boost::system::error_code & ec);
 
- [[link boost_asio.reference.ssl__basic_context.file_format [*file_format]]]
- [File format types. ]
-
- ]
 
- [
+[section:overload1 ssl::stream::peek (1 of 2 overloads)]
 
- [[link boost_asio.reference.ssl__basic_context.impl_type [*impl_type]]]
- [The native implementation type of the locking dispatcher. ]
-
- ]
+Peek at the incoming data on the stream.
 
- [
+ template<
+ typename ``[link boost_asio.reference.MutableBufferSequence MutableBufferSequence]``>
+ std::size_t peek(
+ const MutableBufferSequence & buffers);
 
- [[link boost_asio.reference.ssl__basic_context.method [*method]]]
- [Different methods supported by a context. ]
-
- ]
 
- [
+This function is used to peek at the incoming data on the stream, without removing it from the input queue. The function call will block until data has been read successfully or an error occurs.
 
- [[link boost_asio.reference.ssl__basic_context.options [*options]]]
- [Bitmask type for SSL options. ]
-
- ]
 
- [
+[heading Parameters]
+
 
- [[link boost_asio.reference.ssl__basic_context.password_purpose [*password_purpose]]]
- [Purpose of PEM password. ]
+[variablelist
   
- ]
+[[buffers][The buffers into which the data will be read.]]
 
- [
+]
 
- [[link boost_asio.reference.ssl__basic_context.service_type [*service_type]]]
- [The type of the service that will be used to provide context operations. ]
-
- ]
+[heading Return Value]
+
+The number of bytes read.
 
- [
+[heading Exceptions]
+
 
- [[link boost_asio.reference.ssl__basic_context.verify_mode [*verify_mode]]]
- [Bitmask type for peer verification. ]
+[variablelist
   
- ]
+[[boost::system::system_error][Thrown on failure. ]]
 
 ]
 
-[heading Member Functions]
-[table
- [[Name][Description]]
 
- [
- [[link boost_asio.reference.ssl__basic_context.add_verify_path [*add_verify_path]]]
- [Add a directory containing certificate authority files to be used for performing verification. ]
- ]
-
- [
- [[link boost_asio.reference.ssl__basic_context.basic_context [*basic_context]]]
- [Constructor. ]
- ]
-
- [
- [[link boost_asio.reference.ssl__basic_context.impl [*impl]]]
- [Get the underlying implementation in the native type. ]
- ]
-
- [
- [[link boost_asio.reference.ssl__basic_context.load_verify_file [*load_verify_file]]]
- [Load a certification authority file for performing verification. ]
- ]
-
- [
- [[link boost_asio.reference.ssl__basic_context.set_options [*set_options]]]
- [Set options on the context. ]
- ]
-
- [
- [[link boost_asio.reference.ssl__basic_context.set_password_callback [*set_password_callback]]]
- [Set the password callback. ]
- ]
-
- [
- [[link boost_asio.reference.ssl__basic_context.set_verify_mode [*set_verify_mode]]]
- [Set the peer verification mode. ]
- ]
-
- [
- [[link boost_asio.reference.ssl__basic_context.use_certificate_chain_file [*use_certificate_chain_file]]]
- [Use a certificate chain from a file. ]
- ]
-
- [
- [[link boost_asio.reference.ssl__basic_context.use_certificate_file [*use_certificate_file]]]
- [Use a certificate from a file. ]
- ]
-
- [
- [[link boost_asio.reference.ssl__basic_context.use_private_key_file [*use_private_key_file]]]
- [Use a private key from a file. ]
- ]
-
- [
- [[link boost_asio.reference.ssl__basic_context.use_rsa_private_key_file [*use_rsa_private_key_file]]]
- [Use an RSA private key from a file. ]
- ]
-
- [
- [[link boost_asio.reference.ssl__basic_context.use_tmp_dh_file [*use_tmp_dh_file]]]
- [Use the specified file to obtain the temporary Diffie-Hellman parameters. ]
- ]
-
- [
- [[link boost_asio.reference.ssl__basic_context._basic_context [*~basic_context]]]
- [Destructor. ]
- ]
-
-]
 
-[heading Data Members]
-[table
- [[Name][Description]]
+[endsect]
 
- [
- [[link boost_asio.reference.ssl__basic_context.default_workarounds [*default_workarounds]]]
- [Implement various bug workarounds. ]
- ]
 
- [
- [[link boost_asio.reference.ssl__basic_context.no_sslv2 [*no_sslv2]]]
- [Disable SSL v2. ]
- ]
 
- [
- [[link boost_asio.reference.ssl__basic_context.no_sslv3 [*no_sslv3]]]
- [Disable SSL v3. ]
- ]
+[section:overload2 ssl::stream::peek (2 of 2 overloads)]
 
- [
- [[link boost_asio.reference.ssl__basic_context.no_tlsv1 [*no_tlsv1]]]
- [Disable TLS v1. ]
- ]
+Peek at the incoming data on the stream.
 
- [
- [[link boost_asio.reference.ssl__basic_context.single_dh_use [*single_dh_use]]]
- [Always create a new key when using tmp_dh parameters. ]
- ]
+ template<
+ typename ``[link boost_asio.reference.MutableBufferSequence MutableBufferSequence]``>
+ std::size_t peek(
+ const MutableBufferSequence & buffers,
+ boost::system::error_code & ec);
 
- [
- [[link boost_asio.reference.ssl__basic_context.verify_client_once [*verify_client_once]]]
- [Do not request client certificate on renegotiation. Ignored unless verify_peer is set. ]
- ]
 
- [
- [[link boost_asio.reference.ssl__basic_context.verify_fail_if_no_peer_cert [*verify_fail_if_no_peer_cert]]]
- [Fail verification if the peer has no certificate. Ignored unless verify_peer is set. ]
- ]
+This function is used to peek at the incoming data on the stream, withoutxi removing it from the input queue. The function call will block until data has been read successfully or an error occurs.
 
- [
- [[link boost_asio.reference.ssl__basic_context.verify_none [*verify_none]]]
- [No verification. ]
- ]
 
- [
- [[link boost_asio.reference.ssl__basic_context.verify_peer [*verify_peer]]]
- [Verify the peer. ]
- ]
+[heading Parameters]
+
+
+[variablelist
+
+[[buffers][The buffers into which the data will be read.]]
+
+[[ec][Set to indicate what error occurred, if any.]]
 
 ]
 
+[heading Return Value]
+
+The number of bytes read. Returns 0 if an error occurred.
+
 
 
 [endsect]
 
 
-[section:ssl__context_base ssl::context_base]
+[endsect]
 
-The context_base class is used as a base for the basic_context class template so that we have a common place to define various enums.
+[section:read_some ssl::stream::read_some]
 
- class context_base
+Read some data from the stream.
 
+ template<
+ typename ``[link boost_asio.reference.MutableBufferSequence MutableBufferSequence]``>
+ std::size_t ``[link boost_asio.reference.ssl__stream.read_some.overload1 read_some]``(
+ const MutableBufferSequence & buffers);
 
-[heading Types]
-[table
- [[Name][Description]]
+ template<
+ typename ``[link boost_asio.reference.MutableBufferSequence MutableBufferSequence]``>
+ std::size_t ``[link boost_asio.reference.ssl__stream.read_some.overload2 read_some]``(
+ const MutableBufferSequence & buffers,
+ boost::system::error_code & ec);
 
- [
 
- [[link boost_asio.reference.ssl__context_base.file_format [*file_format]]]
- [File format types. ]
-
- ]
+[section:overload1 ssl::stream::read_some (1 of 2 overloads)]
 
- [
+Read some data from the stream.
 
- [[link boost_asio.reference.ssl__context_base.method [*method]]]
- [Different methods supported by a context. ]
-
- ]
+ template<
+ typename ``[link boost_asio.reference.MutableBufferSequence MutableBufferSequence]``>
+ std::size_t read_some(
+ const MutableBufferSequence & buffers);
 
- [
 
- [[link boost_asio.reference.ssl__context_base.options [*options]]]
- [Bitmask type for SSL options. ]
-
- ]
+This function is used to read data from the stream. The function call will block until one or more bytes of data has been read successfully, or until an error occurs.
 
- [
 
- [[link boost_asio.reference.ssl__context_base.password_purpose [*password_purpose]]]
- [Purpose of PEM password. ]
+[heading Parameters]
+
+
+[variablelist
   
- ]
+[[buffers][The buffers into which the data will be read.]]
 
- [
+]
 
- [[link boost_asio.reference.ssl__context_base.verify_mode [*verify_mode]]]
- [Bitmask type for peer verification. ]
+[heading Return Value]
+
+The number of bytes read.
+
+[heading Exceptions]
+
+
+[variablelist
   
- ]
+[[boost::system::system_error][Thrown on failure.]]
 
 ]
 
-[heading Data Members]
-[table
- [[Name][Description]]
+[heading Remarks]
+
+The read\_some operation may not read all of the requested number of bytes. Consider using the
+[link boost_asio.reference.read read] function if you need to ensure that the requested amount of data is read before the blocking operation completes.
 
- [
- [[link boost_asio.reference.ssl__context_base.default_workarounds [*default_workarounds]]]
- [Implement various bug workarounds. ]
- ]
 
- [
- [[link boost_asio.reference.ssl__context_base.no_sslv2 [*no_sslv2]]]
- [Disable SSL v2. ]
- ]
 
- [
- [[link boost_asio.reference.ssl__context_base.no_sslv3 [*no_sslv3]]]
- [Disable SSL v3. ]
- ]
+[endsect]
 
- [
- [[link boost_asio.reference.ssl__context_base.no_tlsv1 [*no_tlsv1]]]
- [Disable TLS v1. ]
- ]
 
- [
- [[link boost_asio.reference.ssl__context_base.single_dh_use [*single_dh_use]]]
- [Always create a new key when using tmp_dh parameters. ]
- ]
 
- [
- [[link boost_asio.reference.ssl__context_base.verify_client_once [*verify_client_once]]]
- [Do not request client certificate on renegotiation. Ignored unless verify_peer is set. ]
- ]
+[section:overload2 ssl::stream::read_some (2 of 2 overloads)]
 
- [
- [[link boost_asio.reference.ssl__context_base.verify_fail_if_no_peer_cert [*verify_fail_if_no_peer_cert]]]
- [Fail verification if the peer has no certificate. Ignored unless verify_peer is set. ]
- ]
+Read some data from the stream.
 
- [
- [[link boost_asio.reference.ssl__context_base.verify_none [*verify_none]]]
- [No verification. ]
- ]
+ template<
+ typename ``[link boost_asio.reference.MutableBufferSequence MutableBufferSequence]``>
+ std::size_t read_some(
+ const MutableBufferSequence & buffers,
+ boost::system::error_code & ec);
 
- [
- [[link boost_asio.reference.ssl__context_base.verify_peer [*verify_peer]]]
- [Verify the peer. ]
- ]
+
+This function is used to read data from the stream. The function call will block until one or more bytes of data has been read successfully, or until an error occurs.
+
+
+[heading Parameters]
+
+
+[variablelist
+
+[[buffers][The buffers into which the data will be read.]]
+
+[[ec][Set to indicate what error occurred, if any.]]
 
 ]
 
+[heading Return Value]
+
+The number of bytes read. Returns 0 if an error occurred.
 
-[section:default_workarounds ssl::context_base::default_workarounds]
+[heading Remarks]
+
+The read\_some operation may not read all of the requested number of bytes. Consider using the
+[link boost_asio.reference.read read] function if you need to ensure that the requested amount of data is read before the blocking operation completes.
 
-Implement various bug workarounds.
 
- static const int default_workarounds = implementation_defined;
 
+[endsect]
 
 
 [endsect]
 
 
+[section:service_type ssl::stream::service_type]
 
-[section:file_format ssl::context_base::file_format]
+The type of the service that will be used to provide stream operations.
 
-File format types.
+ typedef Service service_type;
 
- enum file_format
 
-[heading Values]
-[variablelist
 
- [
- [asn1]
- [ASN.1 file. ]
- ]
 
- [
- [pem]
- [PEM file. ]
- ]
+[endsect]
 
-]
 
+[section:shutdown ssl::stream::shutdown]
 
+Shut down SSL on the stream.
 
-[endsect]
+ void ``[link boost_asio.reference.ssl__stream.shutdown.overload1 shutdown]``();
 
+ boost::system::error_code ``[link boost_asio.reference.ssl__stream.shutdown.overload2 shutdown]``(
+ boost::system::error_code & ec);
 
 
-[section:method ssl::context_base::method]
+[section:overload1 ssl::stream::shutdown (1 of 2 overloads)]
 
-Different methods supported by a context.
+Shut down SSL on the stream.
 
- enum method
+ void shutdown();
+
+
+This function is used to shut down SSL on the stream. The function call will block until SSL has been shut down or an error occurs.
+
+
+[heading Exceptions]
+
 
-[heading Values]
 [variablelist
+
+[[boost::system::system_error][Thrown on failure. ]]
 
- [
- [sslv2]
- [Generic SSL version 2. ]
- ]
+]
 
- [
- [sslv2_client]
- [SSL version 2 client. ]
- ]
 
- [
- [sslv2_server]
- [SSL version 2 server. ]
- ]
 
- [
- [sslv3]
- [Generic SSL version 3. ]
- ]
+[endsect]
 
- [
- [sslv3_client]
- [SSL version 3 client. ]
- ]
 
- [
- [sslv3_server]
- [SSL version 3 server. ]
- ]
 
- [
- [tlsv1]
- [Generic TLS version 1. ]
- ]
+[section:overload2 ssl::stream::shutdown (2 of 2 overloads)]
 
- [
- [tlsv1_client]
- [TLS version 1 client. ]
- ]
+Shut down SSL on the stream.
 
- [
- [tlsv1_server]
- [TLS version 1 server. ]
- ]
+ boost::system::error_code shutdown(
+ boost::system::error_code & ec);
 
- [
- [sslv23]
- [Generic SSL/TLS. ]
- ]
 
- [
- [sslv23_client]
- [SSL/TLS client. ]
- ]
+This function is used to shut down SSL on the stream. The function call will block until SSL has been shut down or an error occurs.
 
- [
- [sslv23_server]
- [SSL/TLS server. ]
- ]
+
+[heading Parameters]
+
+
+[variablelist
+
+[[ec][Set to indicate what error occurred, if any. ]]
 
 ]
 
@@ -35560,100 +43478,149 @@
 [endsect]
 
 
+[endsect]
 
-[section:no_sslv2 ssl::context_base::no_sslv2]
 
-Disable SSL v2.
+[section:stream ssl::stream::stream]
 
- static const int no_sslv2 = implementation_defined;
+Construct a stream.
 
+ template<
+ typename Arg,
+ typename Context_Service>
+ stream(
+ Arg & arg,
+ basic_context< Context_Service > & context);
 
 
-[endsect]
+This constructor creates a stream and initialises the underlying stream object.
 
 
+[heading Parameters]
+
 
-[section:no_sslv3 ssl::context_base::no_sslv3]
+[variablelist
+
+[[arg][The argument to be passed to initialise the underlying stream.]]
 
-Disable SSL v3.
+[[context][The SSL context to be used for the stream. ]]
 
- static const int no_sslv3 = implementation_defined;
+]
 
 
 
 [endsect]
 
 
+[section:write_some ssl::stream::write_some]
 
-[section:no_tlsv1 ssl::context_base::no_tlsv1]
+Write some data to the stream.
 
-Disable TLS v1.
+ template<
+ typename ``[link boost_asio.reference.ConstBufferSequence ConstBufferSequence]``>
+ std::size_t ``[link boost_asio.reference.ssl__stream.write_some.overload1 write_some]``(
+ const ConstBufferSequence & buffers);
+
+ template<
+ typename ``[link boost_asio.reference.ConstBufferSequence ConstBufferSequence]``>
+ std::size_t ``[link boost_asio.reference.ssl__stream.write_some.overload2 write_some]``(
+ const ConstBufferSequence & buffers,
+ boost::system::error_code & ec);
 
- static const int no_tlsv1 = implementation_defined;
 
+[section:overload1 ssl::stream::write_some (1 of 2 overloads)]
 
+Write some data to the stream.
 
-[endsect]
+ template<
+ typename ``[link boost_asio.reference.ConstBufferSequence ConstBufferSequence]``>
+ std::size_t write_some(
+ const ConstBufferSequence & buffers);
 
 
+This function is used to write data on the stream. The function call will block until one or more bytes of data has been written successfully, or until an error occurs.
 
-[section:options ssl::context_base::options]
 
-Bitmask type for SSL options.
+[heading Parameters]
+
 
- typedef int options;
+[variablelist
+
+[[buffers][The data to be written.]]
 
+]
 
+[heading Return Value]
+
+The number of bytes written.
 
+[heading Exceptions]
+
 
-[endsect]
+[variablelist
+
+[[boost::system::system_error][Thrown on failure.]]
 
+]
 
+[heading Remarks]
+
+The write\_some operation may not transmit all of the data to the peer. Consider using the
+[link boost_asio.reference.write write] function if you need to ensure that all data is written before the blocking operation completes.
 
-[section:password_purpose ssl::context_base::password_purpose]
 
-Purpose of PEM password.
 
- enum password_purpose
+[endsect]
 
-[heading Values]
-[variablelist
 
- [
- [for_reading]
- [The password is needed for reading/decryption. ]
- ]
 
- [
- [for_writing]
- [The password is needed for writing/encryption. ]
- ]
+[section:overload2 ssl::stream::write_some (2 of 2 overloads)]
 
-]
+Write some data to the stream.
 
+ template<
+ typename ``[link boost_asio.reference.ConstBufferSequence ConstBufferSequence]``>
+ std::size_t write_some(
+ const ConstBufferSequence & buffers,
+ boost::system::error_code & ec);
 
 
-[endsect]
+This function is used to write data on the stream. The function call will block until one or more bytes of data has been written successfully, or until an error occurs.
 
 
+[heading Parameters]
+
 
-[section:single_dh_use ssl::context_base::single_dh_use]
+[variablelist
+
+[[buffers][The data to be written to the stream.]]
 
-Always create a new key when using tmp_dh parameters.
+[[ec][Set to indicate what error occurred, if any.]]
 
- static const int single_dh_use = implementation_defined;
+]
+
+[heading Return Value]
+
+The number of bytes written. Returns 0 if an error occurred.
+
+[heading Remarks]
+
+The write\_some operation may not transmit all of the data to the peer. Consider using the
+[link boost_asio.reference.write write] function if you need to ensure that all data is written before the blocking operation completes.
 
 
 
 [endsect]
 
 
+[endsect]
 
-[section:verify_client_once ssl::context_base::verify_client_once]
 
-Do not request client certificate on renegotiation. Ignored unless verify_peer is set.
+[section:_stream ssl::stream::~stream]
+
+Destructor.
 
- static const int verify_client_once = implementation_defined;
+ ~stream();
 
 
 
@@ -35661,36 +43628,60 @@
 
 
 
-[section:verify_fail_if_no_peer_cert ssl::context_base::verify_fail_if_no_peer_cert]
-
-Fail verification if the peer has no certificate. Ignored unless verify_peer is set.
+[endsect]
 
- static const int verify_fail_if_no_peer_cert = implementation_defined;
+[section:ssl__stream_base ssl::stream_base]
 
+The stream_base class is used as a base for the boost::asio::ssl::stream class template so that we have a common place to define various enums.
 
+ class stream_base
 
-[endsect]
 
+[heading Types]
+[table
+ [[Name][Description]]
 
+ [
 
-[section:verify_mode ssl::context_base::verify_mode]
+ [[link boost_asio.reference.ssl__stream_base.handshake_type [*handshake_type]]]
+ [Different handshake types. ]
+
+ ]
 
-Bitmask type for peer verification.
+]
 
- typedef int verify_mode;
+[heading Protected Member Functions]
+[table
+ [[Name][Description]]
 
+ [
+ [[link boost_asio.reference.ssl__stream_base._stream_base [*~stream_base]]]
+ [Protected destructor to prevent deletion through this type. ]
+ ]
+
+]
 
 
+[section:handshake_type ssl::stream_base::handshake_type]
 
-[endsect]
+Different handshake types.
 
+ enum handshake_type
 
+[heading Values]
+[variablelist
 
-[section:verify_none ssl::context_base::verify_none]
+ [
+ [client]
+ [Perform handshaking as a client. ]
+ ]
 
-No verification.
+ [
+ [server]
+ [Perform handshaking as a server. ]
+ ]
 
- static const int verify_none = implementation_defined;
+]
 
 
 
@@ -35698,11 +43689,11 @@
 
 
 
-[section:verify_peer ssl::context_base::verify_peer]
+[section:_stream_base ssl::stream_base::~stream_base]
 
-Verify the peer.
+Protected destructor to prevent deletion through this type.
 
- static const int verify_peer = implementation_defined;
+ ~stream_base();
 
 
 
@@ -35712,11 +43703,11 @@
 
 [endsect]
 
-[section:ssl__context_service ssl::context_service]
+[section:ssl__stream_service ssl::stream_service]
 
-Default service implementation for a context.
+Default service implementation for an SSL stream.
 
- class context_service :
+ class stream_service :
     public io_service::service
 
 
@@ -35726,8 +43717,8 @@
 
   [
 
- [[link boost_asio.reference.ssl__context_service.impl_type [*impl_type]]]
- [The type of the context. ]
+ [[link boost_asio.reference.ssl__stream_service.impl_type [*impl_type]]]
+ [The type of a stream implementation. ]
   
   ]
 
@@ -35738,88 +43729,88 @@
   [[Name][Description]]
 
   [
- [[link boost_asio.reference.ssl__context_service.add_verify_path [*add_verify_path]]]
- [Add a directory containing certification authority files to be used for performing verification. ]
+ [[link boost_asio.reference.ssl__stream_service.async_handshake [*async_handshake]]]
+ [Start an asynchronous SSL handshake. ]
   ]
   
   [
- [[link boost_asio.reference.ssl__context_service.context_service [*context_service]]]
- [Constructor. ]
+ [[link boost_asio.reference.ssl__stream_service.async_read_some [*async_read_some]]]
+ [Start an asynchronous read. ]
   ]
   
   [
- [[link boost_asio.reference.ssl__context_service.create [*create]]]
- [Create a new context implementation. ]
+ [[link boost_asio.reference.ssl__stream_service.async_shutdown [*async_shutdown]]]
+ [Asynchronously shut down SSL on the stream. ]
   ]
   
   [
- [[link boost_asio.reference.ssl__context_service.destroy [*destroy]]]
- [Destroy a context implementation. ]
+ [[link boost_asio.reference.ssl__stream_service.async_write_some [*async_write_some]]]
+ [Start an asynchronous write. ]
   ]
   
   [
- [[link boost_asio.reference.ssl__context_service.get_io_service [*get_io_service]]]
- [Get the io_service object that owns the service. ]
+ [[link boost_asio.reference.ssl__stream_service.create [*create]]]
+ [Create a new stream implementation. ]
   ]
   
   [
- [[link boost_asio.reference.ssl__context_service.io_service [*io_service]]]
- [(Deprecated: use get_io_service().) Get the io_service object that owns the service. ]
+ [[link boost_asio.reference.ssl__stream_service.destroy [*destroy]]]
+ [Destroy a stream implementation. ]
   ]
   
   [
- [[link boost_asio.reference.ssl__context_service.load_verify_file [*load_verify_file]]]
- [Load a certification authority file for performing verification. ]
+ [[link boost_asio.reference.ssl__stream_service.get_io_service [*get_io_service]]]
+ [Get the io_service object that owns the service. ]
   ]
   
   [
- [[link boost_asio.reference.ssl__context_service.null [*null]]]
- [Return a null context implementation. ]
+ [[link boost_asio.reference.ssl__stream_service.handshake [*handshake]]]
+ [Perform SSL handshaking. ]
   ]
   
   [
- [[link boost_asio.reference.ssl__context_service.set_options [*set_options]]]
- [Set options on the context. ]
+ [[link boost_asio.reference.ssl__stream_service.in_avail [*in_avail]]]
+ [Determine the amount of data that may be read without blocking. ]
   ]
   
   [
- [[link boost_asio.reference.ssl__context_service.set_password_callback [*set_password_callback]]]
- [Set the password callback. ]
+ [[link boost_asio.reference.ssl__stream_service.io_service [*io_service]]]
+ [(Deprecated: use get_io_service().) Get the io_service object that owns the service. ]
   ]
   
   [
- [[link boost_asio.reference.ssl__context_service.set_verify_mode [*set_verify_mode]]]
- [Set peer verification mode. ]
+ [[link boost_asio.reference.ssl__stream_service.null [*null]]]
+ [Return a null stream implementation. ]
   ]
   
   [
- [[link boost_asio.reference.ssl__context_service.shutdown_service [*shutdown_service]]]
- [Destroy all user-defined handler objects owned by the service. ]
+ [[link boost_asio.reference.ssl__stream_service.peek [*peek]]]
+ [Peek at the incoming data on the stream. ]
   ]
   
   [
- [[link boost_asio.reference.ssl__context_service.use_certificate_chain_file [*use_certificate_chain_file]]]
- [Use a certificate chain from a file. ]
+ [[link boost_asio.reference.ssl__stream_service.read_some [*read_some]]]
+ [Read some data from the stream. ]
   ]
   
   [
- [[link boost_asio.reference.ssl__context_service.use_certificate_file [*use_certificate_file]]]
- [Use a certificate from a file. ]
+ [[link boost_asio.reference.ssl__stream_service.shutdown [*shutdown]]]
+ [Shut down SSL on the stream. ]
   ]
   
   [
- [[link boost_asio.reference.ssl__context_service.use_private_key_file [*use_private_key_file]]]
- [Use a private key from a file. ]
+ [[link boost_asio.reference.ssl__stream_service.shutdown_service [*shutdown_service]]]
+ [Destroy all user-defined handler objects owned by the service. ]
   ]
   
   [
- [[link boost_asio.reference.ssl__context_service.use_rsa_private_key_file [*use_rsa_private_key_file]]]
- [Use an RSA private key from a file. ]
+ [[link boost_asio.reference.ssl__stream_service.stream_service [*stream_service]]]
+ [Construct a new stream service for the specified io_service. ]
   ]
   
   [
- [[link boost_asio.reference.ssl__context_service.use_tmp_dh_file [*use_tmp_dh_file]]]
- [Use the specified file to obtain the temporary Diffie-Hellman parameters. ]
+ [[link boost_asio.reference.ssl__stream_service.write_some [*write_some]]]
+ [Write some data to the stream. ]
   ]
   
 ]
@@ -35829,21 +43820,25 @@
   [[Name][Description]]
 
   [
- [[link boost_asio.reference.ssl__context_service.id [*id]]]
+ [[link boost_asio.reference.ssl__stream_service.id [*id]]]
     [The unique service identifier. ]
   ]
 
 ]
 
 
-[section:add_verify_path ssl::context_service::add_verify_path]
+[section:async_handshake ssl::stream_service::async_handshake]
 
-Add a directory containing certification authority files to be used for performing verification.
+Start an asynchronous SSL handshake.
 
- boost::system::error_code add_verify_path(
+ template<
+ typename Stream,
+ typename HandshakeHandler>
+ void async_handshake(
       impl_type & impl,
- const std::string & path,
- boost::system::error_code & ec);
+ Stream & next_layer,
+ stream_base::handshake_type type,
+ HandshakeHandler handler);
 
 
 
@@ -35851,12 +43846,19 @@
 
 
 
-[section:context_service ssl::context_service::context_service]
+[section:async_read_some ssl::stream_service::async_read_some]
 
-Constructor.
+Start an asynchronous read.
 
- context_service(
- boost::asio::io_service & io_service);
+ template<
+ typename Stream,
+ typename ``[link boost_asio.reference.MutableBufferSequence MutableBufferSequence]``,
+ typename ``[link boost_asio.reference.ReadHandler ReadHandler]``>
+ void async_read_some(
+ impl_type & impl,
+ Stream & next_layer,
+ const MutableBufferSequence & buffers,
+ ReadHandler handler);
 
 
 
@@ -35864,13 +43866,55 @@
 
 
 
-[section:create ssl::context_service::create]
+[section:async_shutdown ssl::stream_service::async_shutdown]
+
+Asynchronously shut down SSL on the stream.
+
+ template<
+ typename Stream,
+ typename ShutdownHandler>
+ void async_shutdown(
+ impl_type & impl,
+ Stream & next_layer,
+ ShutdownHandler handler);
+
+
+
+[endsect]
+
+
+
+[section:async_write_some ssl::stream_service::async_write_some]
+
+Start an asynchronous write.
+
+ template<
+ typename Stream,
+ typename ``[link boost_asio.reference.ConstBufferSequence ConstBufferSequence]``,
+ typename ``[link boost_asio.reference.WriteHandler WriteHandler]``>
+ void async_write_some(
+ impl_type & impl,
+ Stream & next_layer,
+ const ConstBufferSequence & buffers,
+ WriteHandler handler);
 
-Create a new context implementation.
 
+
+[endsect]
+
+
+
+[section:create ssl::stream_service::create]
+
+Create a new stream implementation.
+
+ template<
+ typename Stream,
+ typename Context_Service>
   void create(
       impl_type & impl,
- context_base::method m);
+ Stream & next_layer,
+ basic_context< Context_Service > & context);
 
 
 
@@ -35878,12 +43922,15 @@
 
 
 
-[section:destroy ssl::context_service::destroy]
+[section:destroy ssl::stream_service::destroy]
 
-Destroy a context implementation.
+Destroy a stream implementation.
 
+ template<
+ typename Stream>
   void destroy(
- impl_type & impl);
+ impl_type & impl,
+ Stream & next_layer);
 
 
 
@@ -35891,7 +43938,7 @@
 
 
 
-[section:get_io_service ssl::context_service::get_io_service]
+[section:get_io_service ssl::stream_service::get_io_service]
 
 
 ['Inherited from io_service.]
@@ -35906,11 +43953,17 @@
 
 
 
-[section:id ssl::context_service::id]
+[section:handshake ssl::stream_service::handshake]
 
-The unique service identifier.
+Perform SSL handshaking.
 
- static boost::asio::io_service::id id;
+ template<
+ typename Stream>
+ boost::system::error_code handshake(
+ impl_type & impl,
+ Stream & next_layer,
+ stream_base::handshake_type type,
+ boost::system::error_code & ec);
 
 
 
@@ -35918,12 +43971,11 @@
 
 
 
-[section:impl_type ssl::context_service::impl_type]
-
-The type of the context.
+[section:id ssl::stream_service::id]
 
- typedef implementation_defined impl_type;
+The unique service identifier.
 
+ static boost::asio::io_service::id id;
 
 
 
@@ -35931,14 +43983,12 @@
 
 
 
-[section:io_service ssl::context_service::io_service]
-
+[section:impl_type ssl::stream_service::impl_type]
 
-['Inherited from io_service.]
+The type of a stream implementation.
 
-(Deprecated: use get_io_service().) Get the io_service object that owns the service.
+ typedef implementation_defined impl_type;
 
- boost::asio::io_service & io_service();
 
 
 
@@ -35946,13 +43996,15 @@
 
 
 
-[section:load_verify_file ssl::context_service::load_verify_file]
+[section:in_avail ssl::stream_service::in_avail]
 
-Load a certification authority file for performing verification.
+Determine the amount of data that may be read without blocking.
 
- boost::system::error_code load_verify_file(
+ template<
+ typename Stream>
+ std::size_t in_avail(
       impl_type & impl,
- const std::string & filename,
+ Stream & next_layer,
       boost::system::error_code & ec);
 
 
@@ -35961,11 +44013,14 @@
 
 
 
-[section:null ssl::context_service::null]
+[section:io_service ssl::stream_service::io_service]
 
-Return a null context implementation.
 
- impl_type null() const;
+['Inherited from io_service.]
+
+(Deprecated: use get_io_service().) Get the io_service object that owns the service.
+
+ boost::asio::io_service & io_service();
 
 
 
@@ -35973,14 +44028,11 @@
 
 
 
-[section:set_options ssl::context_service::set_options]
+[section:null ssl::stream_service::null]
 
-Set options on the context.
+Return a null stream implementation.
 
- boost::system::error_code set_options(
- impl_type & impl,
- context_base::options o,
- boost::system::error_code & ec);
+ impl_type null() const;
 
 
 
@@ -35988,15 +44040,17 @@
 
 
 
-[section:set_password_callback ssl::context_service::set_password_callback]
+[section:peek ssl::stream_service::peek]
 
-Set the password callback.
+Peek at the incoming data on the stream.
 
   template<
- typename PasswordCallback>
- boost::system::error_code set_password_callback(
+ typename Stream,
+ typename ``[link boost_asio.reference.MutableBufferSequence MutableBufferSequence]``>
+ std::size_t peek(
       impl_type & impl,
- PasswordCallback callback,
+ Stream & next_layer,
+ const MutableBufferSequence & buffers,
       boost::system::error_code & ec);
 
 
@@ -36005,13 +44059,17 @@
 
 
 
-[section:set_verify_mode ssl::context_service::set_verify_mode]
+[section:read_some ssl::stream_service::read_some]
 
-Set peer verification mode.
+Read some data from the stream.
 
- boost::system::error_code set_verify_mode(
+ template<
+ typename Stream,
+ typename ``[link boost_asio.reference.MutableBufferSequence MutableBufferSequence]``>
+ std::size_t read_some(
       impl_type & impl,
- context_base::verify_mode v,
+ Stream & next_layer,
+ const MutableBufferSequence & buffers,
       boost::system::error_code & ec);
 
 
@@ -36020,11 +44078,16 @@
 
 
 
-[section:shutdown_service ssl::context_service::shutdown_service]
+[section:shutdown ssl::stream_service::shutdown]
 
-Destroy all user-defined handler objects owned by the service.
+Shut down SSL on the stream.
 
- void shutdown_service();
+ template<
+ typename Stream>
+ boost::system::error_code shutdown(
+ impl_type & impl,
+ Stream & next_layer,
+ boost::system::error_code & ec);
 
 
 
@@ -36032,14 +44095,11 @@
 
 
 
-[section:use_certificate_chain_file ssl::context_service::use_certificate_chain_file]
+[section:shutdown_service ssl::stream_service::shutdown_service]
 
-Use a certificate chain from a file.
+Destroy all user-defined handler objects owned by the service.
 
- boost::system::error_code use_certificate_chain_file(
- impl_type & impl,
- const std::string & filename,
- boost::system::error_code & ec);
+ void shutdown_service();
 
 
 
@@ -36047,15 +44107,12 @@
 
 
 
-[section:use_certificate_file ssl::context_service::use_certificate_file]
+[section:stream_service ssl::stream_service::stream_service]
 
-Use a certificate from a file.
+Construct a new stream service for the specified io_service.
 
- boost::system::error_code use_certificate_file(
- impl_type & impl,
- const std::string & filename,
- context_base::file_format format,
- boost::system::error_code & ec);
+ stream_service(
+ boost::asio::io_service & io_service);
 
 
 
@@ -36063,14 +44120,17 @@
 
 
 
-[section:use_private_key_file ssl::context_service::use_private_key_file]
+[section:write_some ssl::stream_service::write_some]
 
-Use a private key from a file.
+Write some data to the stream.
 
- boost::system::error_code use_private_key_file(
+ template<
+ typename Stream,
+ typename ``[link boost_asio.reference.ConstBufferSequence ConstBufferSequence]``>
+ std::size_t write_some(
       impl_type & impl,
- const std::string & filename,
- context_base::file_format format,
+ Stream & next_layer,
+ const ConstBufferSequence & buffers,
       boost::system::error_code & ec);
 
 
@@ -36079,48 +44139,80 @@
 
 
 
-[section:use_rsa_private_key_file ssl::context_service::use_rsa_private_key_file]
-
-Use an RSA private key from a file.
+[endsect]
 
- boost::system::error_code use_rsa_private_key_file(
- impl_type & impl,
- const std::string & filename,
- context_base::file_format format,
- boost::system::error_code & ec);
 
+[section:strand strand]
 
+Typedef for backwards compatibility.
 
-[endsect]
+ typedef boost::asio::io_service::strand strand;
 
 
+[heading Member Functions]
+[table
+ [[Name][Description]]
 
-[section:use_tmp_dh_file ssl::context_service::use_tmp_dh_file]
+ [
+ [[link boost_asio.reference.io_service__strand.dispatch [*dispatch]]]
+ [Request the strand to invoke the given handler. ]
+ ]
+
+ [
+ [[link boost_asio.reference.io_service__strand.get_io_service [*get_io_service]]]
+ [Get the io_service associated with the strand. ]
+ ]
+
+ [
+ [[link boost_asio.reference.io_service__strand.io_service [*io_service]]]
+ [(Deprecated: use get_io_service().) Get the io_service associated with the strand. ]
+ ]
+
+ [
+ [[link boost_asio.reference.io_service__strand.post [*post]]]
+ [Request the strand to invoke the given handler and return immediately. ]
+ ]
+
+ [
+ [[link boost_asio.reference.io_service__strand.strand [*strand]]]
+ [Constructor. ]
+ ]
+
+ [
+ [[link boost_asio.reference.io_service__strand.wrap [*wrap]]]
+ [Create a new handler that automatically dispatches the wrapped handler on the strand. ]
+ ]
+
+ [
+ [[link boost_asio.reference.io_service__strand._strand [*~strand]]]
+ [Destructor. ]
+ ]
+
+]
 
-Use the specified file to obtain the temporary Diffie-Hellman parameters.
+The io_service::strand class provides the ability to post and dispatch handlers with the guarantee that none of those handlers will execute concurrently.
 
- boost::system::error_code use_tmp_dh_file(
- impl_type & impl,
- const std::string & filename,
- boost::system::error_code & ec);
 
+[heading Thread Safety]
+
+[*Distinct] [*objects:] Safe.
 
+[*Shared] [*objects:] Safe.
 
-[endsect]
 
 
 
 [endsect]
 
-[section:ssl__stream ssl::stream]
 
-Provides stream-oriented functionality using SSL.
+[section:stream_socket_service stream_socket_service]
+
+Default service implementation for a stream socket.
 
   template<
- typename Stream,
- typename ``[link boost_asio.reference.Service Service]`` = stream_service>
- class stream :
- public ssl::stream_base
+ typename ``[link boost_asio.reference.Protocol Protocol]``>
+ class stream_socket_service :
+ public io_service::service
 
 
 [heading Types]
@@ -36129,36 +44221,29 @@
 
   [
 
- [[link boost_asio.reference.ssl__stream.handshake_type [*handshake_type]]]
- [Different handshake types. ]
-
- ]
-
- [
-
- [[link boost_asio.reference.ssl__stream.impl_type [*impl_type]]]
- [The native implementation type of the stream. ]
+ [[link boost_asio.reference.stream_socket_service.endpoint_type [*endpoint_type]]]
+ [The endpoint type. ]
   
   ]
 
   [
 
- [[link boost_asio.reference.ssl__stream.lowest_layer_type [*lowest_layer_type]]]
- [The type of the lowest layer. ]
+ [[link boost_asio.reference.stream_socket_service.implementation_type [*implementation_type]]]
+ [The type of a stream socket implementation. ]
   
   ]
 
   [
 
- [[link boost_asio.reference.ssl__stream.next_layer_type [*next_layer_type]]]
- [The type of the next layer. ]
+ [[link boost_asio.reference.stream_socket_service.native_type [*native_type]]]
+ [The native socket type. ]
   
   ]
 
   [
 
- [[link boost_asio.reference.ssl__stream.service_type [*service_type]]]
- [The type of the service that will be used to provide stream operations. ]
+ [[link boost_asio.reference.stream_socket_service.protocol_type [*protocol_type]]]
+ [The protocol type. ]
   
   ]
 
@@ -36169,145 +44254,180 @@
   [[Name][Description]]
 
   [
- [[link boost_asio.reference.ssl__stream.async_handshake [*async_handshake]]]
- [Start an asynchronous SSL handshake. ]
+ [[link boost_asio.reference.stream_socket_service.assign [*assign]]]
+ [Assign an existing native socket to a stream socket. ]
   ]
   
   [
- [[link boost_asio.reference.ssl__stream.async_read_some [*async_read_some]]]
- [Start an asynchronous read. ]
+ [[link boost_asio.reference.stream_socket_service.async_connect [*async_connect]]]
+ [Start an asynchronous connect. ]
   ]
   
   [
- [[link boost_asio.reference.ssl__stream.async_shutdown [*async_shutdown]]]
- [Asynchronously shut down SSL on the stream. ]
+ [[link boost_asio.reference.stream_socket_service.async_receive [*async_receive]]]
+ [Start an asynchronous receive. ]
   ]
   
   [
- [[link boost_asio.reference.ssl__stream.async_write_some [*async_write_some]]]
- [Start an asynchronous write. ]
+ [[link boost_asio.reference.stream_socket_service.async_send [*async_send]]]
+ [Start an asynchronous send. ]
   ]
   
   [
- [[link boost_asio.reference.ssl__stream.get_io_service [*get_io_service]]]
- [Get the io_service associated with the object. ]
+ [[link boost_asio.reference.stream_socket_service.at_mark [*at_mark]]]
+ [Determine whether the socket is at the out-of-band data mark. ]
   ]
   
   [
- [[link boost_asio.reference.ssl__stream.handshake [*handshake]]]
- [Perform SSL handshaking. ]
+ [[link boost_asio.reference.stream_socket_service.available [*available]]]
+ [Determine the number of bytes available for reading. ]
+ ]
+
+ [
+ [[link boost_asio.reference.stream_socket_service.bind [*bind]]]
+ [Bind the stream socket to the specified local endpoint. ]
+ ]
+
+ [
+ [[link boost_asio.reference.stream_socket_service.cancel [*cancel]]]
+ [Cancel all asynchronous operations associated with the socket. ]
+ ]
+
+ [
+ [[link boost_asio.reference.stream_socket_service.close [*close]]]
+ [Close a stream socket implementation. ]
+ ]
+
+ [
+ [[link boost_asio.reference.stream_socket_service.connect [*connect]]]
+ [Connect the stream socket to the specified endpoint. ]
+ ]
+
+ [
+ [[link boost_asio.reference.stream_socket_service.construct [*construct]]]
+ [Construct a new stream socket implementation. ]
+ ]
+
+ [
+ [[link boost_asio.reference.stream_socket_service.destroy [*destroy]]]
+ [Destroy a stream socket implementation. ]
+ ]
+
+ [
+ [[link boost_asio.reference.stream_socket_service.get_io_service [*get_io_service]]]
+ [Get the io_service object that owns the service. ]
+ ]
+
+ [
+ [[link boost_asio.reference.stream_socket_service.get_option [*get_option]]]
+ [Get a socket option. ]
+ ]
+
+ [
+ [[link boost_asio.reference.stream_socket_service.io_control [*io_control]]]
+ [Perform an IO control command on the socket. ]
+ ]
+
+ [
+ [[link boost_asio.reference.stream_socket_service.io_service [*io_service]]]
+ [(Deprecated: use get_io_service().) Get the io_service object that owns the service. ]
   ]
   
   [
- [[link boost_asio.reference.ssl__stream.impl [*impl]]]
- [Get the underlying implementation in the native type. ]
+ [[link boost_asio.reference.stream_socket_service.is_open [*is_open]]]
+ [Determine whether the socket is open. ]
   ]
   
   [
- [[link boost_asio.reference.ssl__stream.in_avail [*in_avail]]]
- [Determine the amount of data that may be read without blocking. ]
+ [[link boost_asio.reference.stream_socket_service.local_endpoint [*local_endpoint]]]
+ [Get the local endpoint. ]
   ]
   
   [
- [[link boost_asio.reference.ssl__stream.io_service [*io_service]]]
- [(Deprecated: use get_io_service().) Get the io_service associated with the object. ]
+ [[link boost_asio.reference.stream_socket_service.native [*native]]]
+ [Get the native socket implementation. ]
   ]
   
   [
- [[link boost_asio.reference.ssl__stream.lowest_layer [*lowest_layer]]]
- [Get a reference to the lowest layer. ]
+ [[link boost_asio.reference.stream_socket_service.open [*open]]]
+ [Open a stream socket. ]
   ]
   
   [
- [[link boost_asio.reference.ssl__stream.next_layer [*next_layer]]]
- [Get a reference to the next layer. ]
+ [[link boost_asio.reference.stream_socket_service.receive [*receive]]]
+ [Receive some data from the peer. ]
   ]
   
   [
- [[link boost_asio.reference.ssl__stream.peek [*peek]]]
- [Peek at the incoming data on the stream. ]
+ [[link boost_asio.reference.stream_socket_service.remote_endpoint [*remote_endpoint]]]
+ [Get the remote endpoint. ]
   ]
   
   [
- [[link boost_asio.reference.ssl__stream.read_some [*read_some]]]
- [Read some data from the stream. ]
+ [[link boost_asio.reference.stream_socket_service.send [*send]]]
+ [Send the given data to the peer. ]
   ]
   
   [
- [[link boost_asio.reference.ssl__stream.shutdown [*shutdown]]]
- [Shut down SSL on the stream. ]
+ [[link boost_asio.reference.stream_socket_service.set_option [*set_option]]]
+ [Set a socket option. ]
   ]
   
   [
- [[link boost_asio.reference.ssl__stream.stream [*stream]]]
- [Construct a stream. ]
+ [[link boost_asio.reference.stream_socket_service.shutdown [*shutdown]]]
+ [Disable sends or receives on the socket. ]
   ]
   
   [
- [[link boost_asio.reference.ssl__stream.write_some [*write_some]]]
- [Write some data to the stream. ]
+ [[link boost_asio.reference.stream_socket_service.shutdown_service [*shutdown_service]]]
+ [Destroy all user-defined handler objects owned by the service. ]
   ]
   
   [
- [[link boost_asio.reference.ssl__stream._stream [*~stream]]]
- [Destructor. ]
+ [[link boost_asio.reference.stream_socket_service.stream_socket_service [*stream_socket_service]]]
+ [Construct a new stream socket service for the specified io_service. ]
   ]
   
 ]
 
-The stream class template provides asynchronous and blocking stream-oriented functionality using SSL.
-
-
-[heading Thread Safety]
-
-[*Distinct] [*objects:] Safe.
-
-[*Shared] [*objects:] Unsafe.
-
-[heading Example]
-
-To use the SSL stream template with an ip::tcp::socket, you would write:
-
- boost::asio::io_service io_service;
- boost::asio::ssl::context context(io_service, boost::asio::ssl::context::sslv23);
- boost::asio::ssl::stream<boost::asio::ip::tcp::socket> sock(io_service, context);
-
-
+[heading Data Members]
+[table
+ [[Name][Description]]
 
+ [
+ [[link boost_asio.reference.stream_socket_service.id [*id]]]
+ [The unique service identifier. ]
+ ]
 
+]
 
 
-[section:async_handshake ssl::stream::async_handshake]
+[section:assign stream_socket_service::assign]
 
-Start an asynchronous SSL handshake.
+Assign an existing native socket to a stream socket.
 
- template<
- typename HandshakeHandler>
- void async_handshake(
- handshake_type type,
- HandshakeHandler handler);
+ boost::system::error_code assign(
+ implementation_type & impl,
+ const protocol_type & protocol,
+ const native_type & native_socket,
+ boost::system::error_code & ec);
 
 
-This function is used to asynchronously perform an SSL handshake on the stream. This function call always returns immediately.
 
+[endsect]
 
-[heading Parameters]
-
 
-[variablelist
-
-[[type][The type of handshaking to be performed, i.e. as a client or as a server.]]
 
-[[handler][The handler to be called when the handshake operation completes. Copies will be made of the handler as required. The equivalent function signature of the handler must be:
-``
- void handler(
- const boost::system::error_code& error // Result of operation.
- );
+[section:async_connect stream_socket_service::async_connect]
 
-``
-]]
+Start an asynchronous connect.
 
-]
+ template<
+ typename ``[link boost_asio.reference.ConnectHandler ConnectHandler]``>
+ void async_connect(
+ implementation_type & impl,
+ const endpoint_type & peer_endpoint,
+ ConnectHandler handler);
 
 
 
@@ -36315,124 +44435,51 @@
 
 
 
-[section:async_read_some ssl::stream::async_read_some]
+[section:async_receive stream_socket_service::async_receive]
 
-Start an asynchronous read.
+Start an asynchronous receive.
 
   template<
       typename ``[link boost_asio.reference.MutableBufferSequence MutableBufferSequence]``,
       typename ``[link boost_asio.reference.ReadHandler ReadHandler]``>
- void async_read_some(
+ void async_receive(
+ implementation_type & impl,
       const MutableBufferSequence & buffers,
+ socket_base::message_flags flags,
       ReadHandler handler);
 
 
-This function is used to asynchronously read one or more bytes of data from the stream. The function call always returns immediately.
-
-
-[heading Parameters]
-
-
-[variablelist
-
-[[buffers][The buffers into which the data will be read. Although the buffers object may be copied as necessary, ownership of the underlying buffers is retained by the caller, which must guarantee that they remain valid until the handler is called.]]
-
-[[handler][The handler to be called when the read operation completes. Copies will be made of the handler as required. The equivalent function signature of the handler must be:
-``
- void handler(
- const boost::system::error_code& error, // Result of operation.
- std::size_t bytes_transferred // Number of bytes read.
- );
-
-``
-]]
-
-]
-
-[heading Remarks]
-
-The async\_read\_some operation may not read all of the requested number of bytes. Consider using the
-[link boost_asio.reference.async_read async_read] function if you need to ensure that the requested amount of data is read before the asynchronous operation completes.
-
-
-
-[endsect]
-
-
-
-[section:async_shutdown ssl::stream::async_shutdown]
-
-Asynchronously shut down SSL on the stream.
-
- template<
- typename ShutdownHandler>
- void async_shutdown(
- ShutdownHandler handler);
-
-
-This function is used to asynchronously shut down SSL on the stream. This function call always returns immediately.
-
-
-[heading Parameters]
-
-
-[variablelist
-
-[[handler][The handler to be called when the handshake operation completes. Copies will be made of the handler as required. The equivalent function signature of the handler must be:
-``
- void handler(
- const boost::system::error_code& error // Result of operation.
- );
-
-``
-]]
-
-]
-
-
 
 [endsect]
 
 
 
-[section:async_write_some ssl::stream::async_write_some]
+[section:async_send stream_socket_service::async_send]
 
-Start an asynchronous write.
+Start an asynchronous send.
 
   template<
       typename ``[link boost_asio.reference.ConstBufferSequence ConstBufferSequence]``,
       typename ``[link boost_asio.reference.WriteHandler WriteHandler]``>
- void async_write_some(
+ void async_send(
+ implementation_type & impl,
       const ConstBufferSequence & buffers,
+ socket_base::message_flags flags,
       WriteHandler handler);
 
 
-This function is used to asynchronously write one or more bytes of data to the stream. The function call always returns immediately.
-
 
-[heading Parameters]
-
+[endsect]
 
-[variablelist
-
-[[buffers][The data to be written to the stream. Although the buffers object may be copied as necessary, ownership of the underlying buffers is retained by the caller, which must guarantee that they remain valid until the handler is called.]]
 
-[[handler][The handler to be called when the write operation completes. Copies will be made of the handler as required. The equivalent function signature of the handler must be:
-``
- void handler(
- const boost::system::error_code& error, // Result of operation.
- std::size_t bytes_transferred // Number of bytes written.
- );
 
-``
-]]
+[section:at_mark stream_socket_service::at_mark]
 
-]
+Determine whether the socket is at the out-of-band data mark.
 
-[heading Remarks]
-
-The async\_write\_some operation may not transmit all of the data to the peer. Consider using the
-[link boost_asio.reference.async_write async_write] function if you need to ensure that all data is written before the blocking operation completes.
+ bool at_mark(
+ const implementation_type & impl,
+ boost::system::error_code & ec) const;
 
 
 
@@ -36440,65 +44487,42 @@
 
 
 
-[section:get_io_service ssl::stream::get_io_service]
-
-Get the io_service associated with the object.
-
- boost::asio::io_service & get_io_service();
-
-
-This function may be used to obtain the io_service object that the stream uses to dispatch handlers for asynchronous operations.
+[section:available stream_socket_service::available]
 
+Determine the number of bytes available for reading.
 
-[heading Return Value]
-
-A reference to the io_service object that stream will use to dispatch handlers. Ownership is not transferred to the caller.
+ std::size_t available(
+ const implementation_type & impl,
+ boost::system::error_code & ec) const;
 
 
 
 [endsect]
 
 
-[section:handshake ssl::stream::handshake]
 
-Perform SSL handshaking.
+[section:bind stream_socket_service::bind]
 
- void ``[link boost_asio.reference.ssl__stream.handshake.overload1 handshake]``(
- handshake_type type);
+Bind the stream socket to the specified local endpoint.
 
- boost::system::error_code ``[link boost_asio.reference.ssl__stream.handshake.overload2 handshake]``(
- handshake_type type,
+ boost::system::error_code bind(
+ implementation_type & impl,
+ const endpoint_type & endpoint,
       boost::system::error_code & ec);
 
 
-[section:overload1 ssl::stream::handshake (1 of 2 overloads)]
-
-Perform SSL handshaking.
-
- void handshake(
- handshake_type type);
-
-
-This function is used to perform SSL handshaking on the stream. The function call will block until handshaking is complete or an error occurs.
-
 
-[heading Parameters]
-
+[endsect]
 
-[variablelist
-
-[[type][The type of handshaking to be performed, i.e. as a client or as a server.]]
 
-]
 
-[heading Exceptions]
-
+[section:cancel stream_socket_service::cancel]
 
-[variablelist
-
-[[boost::system::system_error][Thrown on failure. ]]
+Cancel all asynchronous operations associated with the socket.
 
-]
+ boost::system::error_code cancel(
+ implementation_type & impl,
+ boost::system::error_code & ec);
 
 
 
@@ -36506,57 +44530,41 @@
 
 
 
-[section:overload2 ssl::stream::handshake (2 of 2 overloads)]
+[section:close stream_socket_service::close]
 
-Perform SSL handshaking.
+Close a stream socket implementation.
 
- boost::system::error_code handshake(
- handshake_type type,
+ boost::system::error_code close(
+ implementation_type & impl,
       boost::system::error_code & ec);
 
 
-This function is used to perform SSL handshaking on the stream. The function call will block until handshaking is complete or an error occurs.
-
 
-[heading Parameters]
-
+[endsect]
 
-[variablelist
-
-[[type][The type of handshaking to be performed, i.e. as a client or as a server.]]
 
-[[ec][Set to indicate what error occurred, if any. ]]
 
-]
+[section:connect stream_socket_service::connect]
 
+Connect the stream socket to the specified endpoint.
 
+ boost::system::error_code connect(
+ implementation_type & impl,
+ const endpoint_type & peer_endpoint,
+ boost::system::error_code & ec);
 
-[endsect]
 
 
 [endsect]
 
 
-[section:handshake_type ssl::stream::handshake_type]
-
-Different handshake types.
-
- enum handshake_type
-
-[heading Values]
-[variablelist
 
- [
- [client]
- [Perform handshaking as a client. ]
- ]
+[section:construct stream_socket_service::construct]
 
- [
- [server]
- [Perform handshaking as a server. ]
- ]
+Construct a new stream socket implementation.
 
-]
+ void construct(
+ implementation_type & impl);
 
 
 
@@ -36564,25 +44572,24 @@
 
 
 
-[section:impl ssl::stream::impl]
-
-Get the underlying implementation in the native type.
+[section:destroy stream_socket_service::destroy]
 
- impl_type impl();
+Destroy a stream socket implementation.
 
+ void destroy(
+ implementation_type & impl);
 
-This function may be used to obtain the underlying implementation of the context. This is intended to allow access to stream functionality that is not otherwise provided.
 
 
 [endsect]
 
 
 
-[section:impl_type ssl::stream::impl_type]
+[section:endpoint_type stream_socket_service::endpoint_type]
 
-The native implementation type of the stream.
+The endpoint type.
 
- typedef service_type::impl_type impl_type;
+ typedef Protocol::endpoint endpoint_type;
 
 
 
@@ -36590,38 +44597,32 @@
 [endsect]
 
 
-[section:in_avail ssl::stream::in_avail]
-
-Determine the amount of data that may be read without blocking.
 
- std::size_t ``[link boost_asio.reference.ssl__stream.in_avail.overload1 in_avail]``();
+[section:get_io_service stream_socket_service::get_io_service]
 
- std::size_t ``[link boost_asio.reference.ssl__stream.in_avail.overload2 in_avail]``(
- boost::system::error_code & ec);
 
+['Inherited from io_service.]
 
-[section:overload1 ssl::stream::in_avail (1 of 2 overloads)]
+Get the io_service object that owns the service.
 
-Determine the amount of data that may be read without blocking.
+ boost::asio::io_service & get_io_service();
 
- std::size_t in_avail();
 
 
-This function is used to determine the amount of data, in bytes, that may be read from the stream without blocking.
+[endsect]
 
 
-[heading Return Value]
-
-The number of bytes of data that can be read without blocking.
 
-[heading Exceptions]
-
+[section:get_option stream_socket_service::get_option]
 
-[variablelist
-
-[[boost::system::system_error][Thrown on failure. ]]
+Get a socket option.
 
-]
+ template<
+ typename ``[link boost_asio.reference.GettableSocketOption GettableSocketOption]``>
+ boost::system::error_code get_option(
+ const implementation_type & impl,
+ GettableSocketOption & option,
+ boost::system::error_code & ec) const;
 
 
 
@@ -36629,51 +44630,41 @@
 
 
 
-[section:overload2 ssl::stream::in_avail (2 of 2 overloads)]
+[section:id stream_socket_service::id]
 
-Determine the amount of data that may be read without blocking.
+The unique service identifier.
 
- std::size_t in_avail(
- boost::system::error_code & ec);
+ static boost::asio::io_service::id id;
 
 
-This function is used to determine the amount of data, in bytes, that may be read from the stream without blocking.
 
+[endsect]
 
-[heading Parameters]
-
 
-[variablelist
-
-[[ec][Set to indicate what error occurred, if any.]]
 
-]
+[section:implementation_type stream_socket_service::implementation_type]
 
-[heading Return Value]
-
-The number of bytes of data that can be read without blocking.
+The type of a stream socket implementation.
 
+ typedef implementation_defined implementation_type;
 
 
-[endsect]
 
 
 [endsect]
 
 
-[section:io_service ssl::stream::io_service]
-
-(Deprecated: use get_io_service().) Get the io_service associated with the object.
-
- boost::asio::io_service & io_service();
-
 
-This function may be used to obtain the io_service object that the stream uses to dispatch handlers for asynchronous operations.
+[section:io_control stream_socket_service::io_control]
 
+Perform an IO control command on the socket.
 
-[heading Return Value]
-
-A reference to the io_service object that stream will use to dispatch handlers. Ownership is not transferred to the caller.
+ template<
+ typename ``[link boost_asio.reference.IoControlCommand IoControlCommand]``>
+ boost::system::error_code io_control(
+ implementation_type & impl,
+ IoControlCommand & command,
+ boost::system::error_code & ec);
 
 
 
@@ -36681,19 +44672,14 @@
 
 
 
-[section:lowest_layer ssl::stream::lowest_layer]
-
-Get a reference to the lowest layer.
-
- lowest_layer_type & lowest_layer();
+[section:io_service stream_socket_service::io_service]
 
 
-This function returns a reference to the lowest layer in a stack of stream layers.
+['Inherited from io_service.]
 
+(Deprecated: use get_io_service().) Get the io_service object that owns the service.
 
-[heading Return Value]
-
-A reference to the lowest layer in the stack of stream layers. Ownership is not transferred to the caller.
+ boost::asio::io_service & io_service();
 
 
 
@@ -36701,12 +44687,12 @@
 
 
 
-[section:lowest_layer_type ssl::stream::lowest_layer_type]
-
-The type of the lowest layer.
+[section:is_open stream_socket_service::is_open]
 
- typedef next_layer_type::lowest_layer_type lowest_layer_type;
+Determine whether the socket is open.
 
+ bool is_open(
+ const implementation_type & impl) const;
 
 
 
@@ -36714,19 +44700,13 @@
 
 
 
-[section:next_layer ssl::stream::next_layer]
-
-Get a reference to the next layer.
-
- next_layer_type & next_layer();
-
-
-This function returns a reference to the next layer in a stack of stream layers.
+[section:local_endpoint stream_socket_service::local_endpoint]
 
+Get the local endpoint.
 
-[heading Return Value]
-
-A reference to the next layer in the stack of stream layers. Ownership is not transferred to the caller.
+ endpoint_type local_endpoint(
+ const implementation_type & impl,
+ boost::system::error_code & ec) const;
 
 
 
@@ -36734,68 +44714,25 @@
 
 
 
-[section:next_layer_type ssl::stream::next_layer_type]
-
-The type of the next layer.
+[section:native stream_socket_service::native]
 
- typedef boost::remove_reference< Stream >::type next_layer_type;
+Get the native socket implementation.
 
+ native_type native(
+ implementation_type & impl);
 
 
 
 [endsect]
 
 
-[section:peek ssl::stream::peek]
-
-Peek at the incoming data on the stream.
-
- template<
- typename ``[link boost_asio.reference.MutableBufferSequence MutableBufferSequence]``>
- std::size_t ``[link boost_asio.reference.ssl__stream.peek.overload1 peek]``(
- const MutableBufferSequence & buffers);
-
- template<
- typename ``[link boost_asio.reference.MutableBufferSequence MutableBufferSequence]``>
- std::size_t ``[link boost_asio.reference.ssl__stream.peek.overload2 peek]``(
- const MutableBufferSequence & buffers,
- boost::system::error_code & ec);
-
-
-[section:overload1 ssl::stream::peek (1 of 2 overloads)]
-
-Peek at the incoming data on the stream.
-
- template<
- typename ``[link boost_asio.reference.MutableBufferSequence MutableBufferSequence]``>
- std::size_t peek(
- const MutableBufferSequence & buffers);
-
-
-This function is used to peek at the incoming data on the stream, without removing it from the input queue. The function call will block until data has been read successfully or an error occurs.
-
-
-[heading Parameters]
-
-
-[variablelist
-
-[[buffers][The buffers into which the data will be read.]]
-
-]
 
-[heading Return Value]
-
-The number of bytes read.
+[section:native_type stream_socket_service::native_type]
 
-[heading Exceptions]
-
+The native socket type.
 
-[variablelist
-
-[[boost::system::system_error][Thrown on failure. ]]
+ typedef implementation_defined native_type;
 
-]
 
 
 
@@ -36803,97 +44740,77 @@
 
 
 
-[section:overload2 ssl::stream::peek (2 of 2 overloads)]
+[section:open stream_socket_service::open]
 
-Peek at the incoming data on the stream.
+Open a stream socket.
 
- template<
- typename ``[link boost_asio.reference.MutableBufferSequence MutableBufferSequence]``>
- std::size_t peek(
- const MutableBufferSequence & buffers,
+ boost::system::error_code open(
+ implementation_type & impl,
+ const protocol_type & protocol,
       boost::system::error_code & ec);
 
 
-This function is used to peek at the incoming data on the stream, withoutxi removing it from the input queue. The function call will block until data has been read successfully or an error occurs.
-
 
-[heading Parameters]
-
+[endsect]
 
-[variablelist
-
-[[buffers][The buffers into which the data will be read.]]
 
-[[ec][Set to indicate what error occurred, if any.]]
 
-]
+[section:protocol_type stream_socket_service::protocol_type]
 
-[heading Return Value]
-
-The number of bytes read. Returns 0 if an error occurred.
+The protocol type.
 
+ typedef Protocol protocol_type;
 
 
-[endsect]
 
 
 [endsect]
 
-[section:read_some ssl::stream::read_some]
 
-Read some data from the stream.
 
- template<
- typename ``[link boost_asio.reference.MutableBufferSequence MutableBufferSequence]``>
- std::size_t ``[link boost_asio.reference.ssl__stream.read_some.overload1 read_some]``(
- const MutableBufferSequence & buffers);
+[section:receive stream_socket_service::receive]
+
+Receive some data from the peer.
 
   template<
       typename ``[link boost_asio.reference.MutableBufferSequence MutableBufferSequence]``>
- std::size_t ``[link boost_asio.reference.ssl__stream.read_some.overload2 read_some]``(
+ std::size_t receive(
+ implementation_type & impl,
       const MutableBufferSequence & buffers,
+ socket_base::message_flags flags,
       boost::system::error_code & ec);
 
 
-[section:overload1 ssl::stream::read_some (1 of 2 overloads)]
 
-Read some data from the stream.
+[endsect]
 
- template<
- typename ``[link boost_asio.reference.MutableBufferSequence MutableBufferSequence]``>
- std::size_t read_some(
- const MutableBufferSequence & buffers);
 
 
-This function is used to read data from the stream. The function call will block until one or more bytes of data has been read successfully, or until an error occurs.
+[section:remote_endpoint stream_socket_service::remote_endpoint]
 
+Get the remote endpoint.
 
-[heading Parameters]
-
+ endpoint_type remote_endpoint(
+ const implementation_type & impl,
+ boost::system::error_code & ec) const;
 
-[variablelist
-
-[[buffers][The buffers into which the data will be read.]]
 
-]
 
-[heading Return Value]
-
-The number of bytes read.
+[endsect]
 
-[heading Exceptions]
-
 
-[variablelist
-
-[[boost::system::system_error][Thrown on failure.]]
 
-]
+[section:send stream_socket_service::send]
 
-[heading Remarks]
-
-The read\_some operation may not read all of the requested number of bytes. Consider using the
-[link boost_asio.reference.read read] function if you need to ensure that the requested amount of data is read before the blocking operation completes.
+Send the given data to the peer.
+
+ template<
+ typename ``[link boost_asio.reference.ConstBufferSequence ConstBufferSequence]``>
+ std::size_t send(
+ implementation_type & impl,
+ const ConstBufferSequence & buffers,
+ socket_base::message_flags flags,
+ boost::system::error_code & ec);
 
 
 
@@ -36901,87 +44818,153 @@
 
 
 
-[section:overload2 ssl::stream::read_some (2 of 2 overloads)]
+[section:set_option stream_socket_service::set_option]
 
-Read some data from the stream.
+Set a socket option.
 
   template<
- typename ``[link boost_asio.reference.MutableBufferSequence MutableBufferSequence]``>
- std::size_t read_some(
- const MutableBufferSequence & buffers,
+ typename ``[link boost_asio.reference.SettableSocketOption SettableSocketOption]``>
+ boost::system::error_code set_option(
+ implementation_type & impl,
+ const SettableSocketOption & option,
       boost::system::error_code & ec);
 
 
-This function is used to read data from the stream. The function call will block until one or more bytes of data has been read successfully, or until an error occurs.
-
 
-[heading Parameters]
-
+[endsect]
 
-[variablelist
-
-[[buffers][The buffers into which the data will be read.]]
 
-[[ec][Set to indicate what error occurred, if any.]]
 
-]
+[section:shutdown stream_socket_service::shutdown]
 
-[heading Return Value]
-
-The number of bytes read. Returns 0 if an error occurred.
+Disable sends or receives on the socket.
 
-[heading Remarks]
-
-The read\_some operation may not read all of the requested number of bytes. Consider using the
-[link boost_asio.reference.read read] function if you need to ensure that the requested amount of data is read before the blocking operation completes.
+ boost::system::error_code shutdown(
+ implementation_type & impl,
+ socket_base::shutdown_type what,
+ boost::system::error_code & ec);
 
 
 
 [endsect]
 
 
+
+[section:shutdown_service stream_socket_service::shutdown_service]
+
+Destroy all user-defined handler objects owned by the service.
+
+ void shutdown_service();
+
+
+
 [endsect]
 
 
-[section:service_type ssl::stream::service_type]
 
-The type of the service that will be used to provide stream operations.
+[section:stream_socket_service stream_socket_service::stream_socket_service]
 
- typedef Service service_type;
+Construct a new stream socket service for the specified io_service.
 
+ stream_socket_service(
+ boost::asio::io_service & io_service);
 
 
 
 [endsect]
 
 
-[section:shutdown ssl::stream::shutdown]
 
-Shut down SSL on the stream.
+[endsect]
 
- void ``[link boost_asio.reference.ssl__stream.shutdown.overload1 shutdown]``();
 
- boost::system::error_code ``[link boost_asio.reference.ssl__stream.shutdown.overload2 shutdown]``(
- boost::system::error_code & ec);
+[section:streambuf streambuf]
 
+Typedef for the typical usage of basic_streambuf.
 
-[section:overload1 ssl::stream::shutdown (1 of 2 overloads)]
+ typedef basic_streambuf streambuf;
 
-Shut down SSL on the stream.
 
- void shutdown();
+[heading Types]
+[table
+ [[Name][Description]]
 
+ [
 
-This function is used to shut down SSL on the stream. The function call will block until SSL has been shut down or an error occurs.
+ [[link boost_asio.reference.basic_streambuf.const_buffers_type [*const_buffers_type]]]
+ [The type used to represent the get area as a list of buffers. ]
+
+ ]
 
+ [
 
-[heading Exceptions]
-
+ [[link boost_asio.reference.basic_streambuf.mutable_buffers_type [*mutable_buffers_type]]]
+ [The type used to represent the put area as a list of buffers. ]
+
+ ]
 
-[variablelist
+]
+
+[heading Member Functions]
+[table
+ [[Name][Description]]
+
+ [
+ [[link boost_asio.reference.basic_streambuf.basic_streambuf [*basic_streambuf]]]
+ [Construct a buffer with a specified maximum size. ]
+ ]
   
-[[boost::system::system_error][Thrown on failure. ]]
+ [
+ [[link boost_asio.reference.basic_streambuf.commit [*commit]]]
+ [Move the start of the put area by the specified number of characters. ]
+ ]
+
+ [
+ [[link boost_asio.reference.basic_streambuf.consume [*consume]]]
+ [Move the start of the get area by the specified number of characters. ]
+ ]
+
+ [
+ [[link boost_asio.reference.basic_streambuf.data [*data]]]
+ [Get a list of buffers that represents the get area. ]
+ ]
+
+ [
+ [[link boost_asio.reference.basic_streambuf.max_size [*max_size]]]
+ [Return the maximum size of the buffer. ]
+ ]
+
+ [
+ [[link boost_asio.reference.basic_streambuf.prepare [*prepare]]]
+ [Get a list of buffers that represents the put area, with the given size. ]
+ ]
+
+ [
+ [[link boost_asio.reference.basic_streambuf.size [*size]]]
+ [Return the size of the get area in characters. ]
+ ]
+
+]
+
+[heading Protected Member Functions]
+[table
+ [[Name][Description]]
 
+ [
+ [[link boost_asio.reference.basic_streambuf.overflow [*overflow]]]
+ []
+ ]
+
+ [
+ [[link boost_asio.reference.basic_streambuf.reserve [*reserve]]]
+ []
+ ]
+
+ [
+ [[link boost_asio.reference.basic_streambuf.underflow [*underflow]]]
+ []
+ ]
+
 ]
 
 
@@ -36989,121 +44972,126 @@
 [endsect]
 
 
+[section:time_traits_lt__ptime__gt_ time_traits< boost::posix_time::ptime >]
 
-[section:overload2 ssl::stream::shutdown (2 of 2 overloads)]
+Time traits specialised for posix_time.
 
-Shut down SSL on the stream.
+ template<>
+ struct time_traits< boost::posix_time::ptime >
 
- boost::system::error_code shutdown(
- boost::system::error_code & ec);
 
+[heading Types]
+[table
+ [[Name][Description]]
 
-This function is used to shut down SSL on the stream. The function call will block until SSL has been shut down or an error occurs.
+ [
 
+ [[link boost_asio.reference.time_traits_lt__ptime__gt_.duration_type [*duration_type]]]
+ [The duration type. ]
+
+ ]
 
-[heading Parameters]
-
+ [
 
-[variablelist
+ [[link boost_asio.reference.time_traits_lt__ptime__gt_.time_type [*time_type]]]
+ [The time type. ]
   
-[[ec][Set to indicate what error occurred, if any. ]]
+ ]
 
 ]
 
+[heading Member Functions]
+[table
+ [[Name][Description]]
 
-
-[endsect]
+ [
+ [[link boost_asio.reference.time_traits_lt__ptime__gt_.add [*add]]]
+ [Add a duration to a time. ]
+ ]
+
+ [
+ [[link boost_asio.reference.time_traits_lt__ptime__gt_.less_than [*less_than]]]
+ [Test whether one time is less than another. ]
+ ]
+
+ [
+ [[link boost_asio.reference.time_traits_lt__ptime__gt_.now [*now]]]
+ [Get the current time. ]
+ ]
+
+ [
+ [[link boost_asio.reference.time_traits_lt__ptime__gt_.subtract [*subtract]]]
+ [Subtract one time from another. ]
+ ]
+
+ [
+ [[link boost_asio.reference.time_traits_lt__ptime__gt_.to_posix_duration [*to_posix_duration]]]
+ [Convert to POSIX duration type. ]
+ ]
+
+]
 
 
-[endsect]
+[section:add time_traits< boost::posix_time::ptime >::add]
 
+Add a duration to a time.
 
-[section:stream ssl::stream::stream]
+ static time_type add(
+ const time_type & t,
+ const duration_type & d);
 
-Construct a stream.
 
- template<
- typename Arg,
- typename Context_Service>
- stream(
- Arg & arg,
- basic_context< Context_Service > & context);
 
+[endsect]
 
-This constructor creates a stream and initialises the underlying stream object.
 
 
-[heading Parameters]
-
+[section:duration_type time_traits< boost::posix_time::ptime >::duration_type]
 
-[variablelist
-
-[[arg][The argument to be passed to initialise the underlying stream.]]
+The duration type.
 
-[[context][The SSL context to be used for the stream. ]]
+ typedef boost::posix_time::time_duration duration_type;
 
-]
 
 
 
 [endsect]
 
 
-[section:write_some ssl::stream::write_some]
 
-Write some data to the stream.
+[section:less_than time_traits< boost::posix_time::ptime >::less_than]
 
- template<
- typename ``[link boost_asio.reference.ConstBufferSequence ConstBufferSequence]``>
- std::size_t ``[link boost_asio.reference.ssl__stream.write_some.overload1 write_some]``(
- const ConstBufferSequence & buffers);
+Test whether one time is less than another.
 
- template<
- typename ``[link boost_asio.reference.ConstBufferSequence ConstBufferSequence]``>
- std::size_t ``[link boost_asio.reference.ssl__stream.write_some.overload2 write_some]``(
- const ConstBufferSequence & buffers,
- boost::system::error_code & ec);
+ static bool less_than(
+ const time_type & t1,
+ const time_type & t2);
 
 
-[section:overload1 ssl::stream::write_some (1 of 2 overloads)]
 
-Write some data to the stream.
+[endsect]
 
- template<
- typename ``[link boost_asio.reference.ConstBufferSequence ConstBufferSequence]``>
- std::size_t write_some(
- const ConstBufferSequence & buffers);
 
 
-This function is used to write data on the stream. The function call will block until one or more bytes of data has been written successfully, or until an error occurs.
+[section:now time_traits< boost::posix_time::ptime >::now]
 
+Get the current time.
 
-[heading Parameters]
-
+ static time_type now();
 
-[variablelist
-
-[[buffers][The data to be written.]]
 
-]
 
-[heading Return Value]
-
-The number of bytes written.
+[endsect]
 
-[heading Exceptions]
-
 
-[variablelist
-
-[[boost::system::system_error][Thrown on failure.]]
 
-]
+[section:subtract time_traits< boost::posix_time::ptime >::subtract]
 
-[heading Remarks]
-
-The write\_some operation may not transmit all of the data to the peer. Consider using the
-[link boost_asio.reference.write write] function if you need to ensure that all data is written before the blocking operation completes.
+Subtract one time from another.
+
+ static duration_type subtract(
+ const time_type & t1,
+ const time_type & t2);
 
 
 
@@ -37111,103 +45099,103 @@
 
 
 
-[section:overload2 ssl::stream::write_some (2 of 2 overloads)]
+[section:time_type time_traits< boost::posix_time::ptime >::time_type]
 
-Write some data to the stream.
+The time type.
 
- template<
- typename ``[link boost_asio.reference.ConstBufferSequence ConstBufferSequence]``>
- std::size_t write_some(
- const ConstBufferSequence & buffers,
- boost::system::error_code & ec);
+ typedef boost::posix_time::ptime time_type;
 
 
-This function is used to write data on the stream. The function call will block until one or more bytes of data has been written successfully, or until an error occurs.
 
 
-[heading Parameters]
-
+[endsect]
 
-[variablelist
-
-[[buffers][The data to be written to the stream.]]
 
-[[ec][Set to indicate what error occurred, if any.]]
 
-]
+[section:to_posix_duration time_traits< boost::posix_time::ptime >::to_posix_duration]
 
-[heading Return Value]
-
-The number of bytes written. Returns 0 if an error occurred.
+Convert to POSIX duration type.
 
-[heading Remarks]
-
-The write\_some operation may not transmit all of the data to the peer. Consider using the
-[link boost_asio.reference.write write] function if you need to ensure that all data is written before the blocking operation completes.
+ static boost::posix_time::time_duration to_posix_duration(
+ const duration_type & d);
 
 
 
 [endsect]
 
 
+
 [endsect]
 
 
-[section:_stream ssl::stream::~stream]
+[section:transfer_all transfer_all]
 
-Destructor.
+Return a completion condition function object that indicates that a read or write operation should continue until all of the data has been transferred, or until an error occurs.
 
- ~stream();
+ unspecified transfer_all();
 
 
+This function is used to create an object, of unspecified type, that meets CompletionCondition requirements.
 
-[endsect]
+
+[heading Example]
+
+Reading until a buffer is full:
+
+ boost::array<char, 128> buf;
+ boost::system::error_code ec;
+ std::size_t n = boost::asio::read(
+ sock, boost::asio::buffer(buf),
+ boost::asio::transfer_all(), ec);
+ if (ec)
+ {
+ // An error occurred.
+ }
+ else
+ {
+ // n == 128
+ }
 
 
 
-[endsect]
 
-[section:ssl__stream_base ssl::stream_base]
 
-The stream_base class is used as a base for the boost::asio::ssl::stream class template so that we have a common place to define various enums.
 
- class stream_base
+[endsect]
 
 
-[heading Types]
-[table
- [[Name][Description]]
 
- [
+[section:transfer_at_least transfer_at_least]
 
- [[link boost_asio.reference.ssl__stream_base.handshake_type [*handshake_type]]]
- [Different handshake types. ]
-
- ]
+Return a completion condition function object that indicates that a read or write operation should continue until a minimum number of bytes has been transferred, or until an error occurs.
 
-]
+ unspecified transfer_at_least(
+ std::size_t minimum);
 
 
-[section:handshake_type ssl::stream_base::handshake_type]
+This function is used to create an object, of unspecified type, that meets CompletionCondition requirements.
 
-Different handshake types.
 
- enum handshake_type
+[heading Example]
+
+Reading until a buffer is full or contains at least 64 bytes:
 
-[heading Values]
-[variablelist
+ boost::array<char, 128> buf;
+ boost::system::error_code ec;
+ std::size_t n = boost::asio::read(
+ sock, boost::asio::buffer(buf),
+ boost::asio::transfer_at_least(64), ec);
+ if (ec)
+ {
+ // An error occurred.
+ }
+ else
+ {
+ // n >= 64 && n <= 128
+ }
 
- [
- [client]
- [Perform handshaking as a client. ]
- ]
 
- [
- [server]
- [Perform handshaking as a server. ]
- ]
 
-]
 
 
 
@@ -37215,164 +45203,187 @@
 
 
 
-[endsect]
+[section:use_service use_service]
 
-[section:ssl__stream_service ssl::stream_service]
 
-Default service implementation for an SSL stream.
 
- class stream_service :
- public io_service::service
+ template<
+ typename ``[link boost_asio.reference.Service Service]``>
+ Service & use_service(
+ io_service & ios);
 
 
-[heading Types]
-[table
- [[Name][Description]]
+This function is used to locate a service object that corresponds to the given service type. If there is no existing implementation of the service, then the io_service will create a new instance of the service.
 
- [
 
- [[link boost_asio.reference.ssl__stream_service.impl_type [*impl_type]]]
- [The type of a stream implementation. ]
+[heading Parameters]
+
+
+[variablelist
   
- ]
+[[ios][The io\_service object that owns the service.]]
 
 ]
 
-[heading Member Functions]
+[heading Return Value]
+
+The service interface implementing the specified service type. Ownership of the service interface is not transferred to the caller.
+
+
+
+[endsect]
+
+
+[section:windows__basic_handle windows::basic_handle]
+
+Provides Windows handle functionality.
+
+ template<
+ typename ``[link boost_asio.reference.HandleService HandleService]``>
+ class basic_handle :
+ public basic_io_object< HandleService >
+
+
+[heading Types]
 [table
   [[Name][Description]]
 
   [
- [[link boost_asio.reference.ssl__stream_service.async_handshake [*async_handshake]]]
- [Start an asynchronous SSL handshake. ]
- ]
-
- [
- [[link boost_asio.reference.ssl__stream_service.async_read_some [*async_read_some]]]
- [Start an asynchronous read. ]
- ]
-
- [
- [[link boost_asio.reference.ssl__stream_service.async_shutdown [*async_shutdown]]]
- [Asynchronously shut down SSL on the stream. ]
- ]
-
- [
- [[link boost_asio.reference.ssl__stream_service.async_write_some [*async_write_some]]]
- [Start an asynchronous write. ]
- ]
+
+ [[link boost_asio.reference.windows__basic_handle.implementation_type [*implementation_type]]]
+ [The underlying implementation type of I/O object. ]
   
- [
- [[link boost_asio.reference.ssl__stream_service.create [*create]]]
- [Create a new stream implementation. ]
   ]
-
+
   [
- [[link boost_asio.reference.ssl__stream_service.destroy [*destroy]]]
- [Destroy a stream implementation. ]
- ]
+
+ [[link boost_asio.reference.windows__basic_handle.lowest_layer_type [*lowest_layer_type]]]
+ [A basic_handle is always the lowest layer. ]
   
+ ]
+
   [
- [[link boost_asio.reference.ssl__stream_service.get_io_service [*get_io_service]]]
- [Get the io_service object that owns the service. ]
+
+ [[link boost_asio.reference.windows__basic_handle.native_type [*native_type]]]
+ [The native representation of a handle. ]
+
   ]
+
+ [
+
+ [[link boost_asio.reference.windows__basic_handle.service_type [*service_type]]]
+ [The type of the service that will be used to provide I/O operations. ]
   
+ ]
+
+]
+
+[heading Member Functions]
+[table
+ [[Name][Description]]
+
   [
- [[link boost_asio.reference.ssl__stream_service.handshake [*handshake]]]
- [Perform SSL handshaking. ]
+ [[link boost_asio.reference.windows__basic_handle.assign [*assign]]]
+ [Assign an existing native handle to the handle. ]
   ]
   
   [
- [[link boost_asio.reference.ssl__stream_service.in_avail [*in_avail]]]
- [Determine the amount of data that may be read without blocking. ]
+ [[link boost_asio.reference.windows__basic_handle.basic_handle [*basic_handle]]]
+ [Construct a basic_handle without opening it. ]
   ]
   
   [
- [[link boost_asio.reference.ssl__stream_service.io_service [*io_service]]]
- [(Deprecated: use get_io_service().) Get the io_service object that owns the service. ]
+ [[link boost_asio.reference.windows__basic_handle.cancel [*cancel]]]
+ [Cancel all asynchronous operations associated with the handle. ]
   ]
   
   [
- [[link boost_asio.reference.ssl__stream_service.null [*null]]]
- [Return a null stream implementation. ]
+ [[link boost_asio.reference.windows__basic_handle.close [*close]]]
+ [Close the handle. ]
   ]
   
   [
- [[link boost_asio.reference.ssl__stream_service.peek [*peek]]]
- [Peek at the incoming data on the stream. ]
+ [[link boost_asio.reference.windows__basic_handle.get_io_service [*get_io_service]]]
+ [Get the io_service associated with the object. ]
   ]
   
   [
- [[link boost_asio.reference.ssl__stream_service.read_some [*read_some]]]
- [Read some data from the stream. ]
+ [[link boost_asio.reference.windows__basic_handle.io_service [*io_service]]]
+ [(Deprecated: use get_io_service().) Get the io_service associated with the object. ]
   ]
   
   [
- [[link boost_asio.reference.ssl__stream_service.shutdown [*shutdown]]]
- [Shut down SSL on the stream. ]
+ [[link boost_asio.reference.windows__basic_handle.is_open [*is_open]]]
+ [Determine whether the handle is open. ]
   ]
   
   [
- [[link boost_asio.reference.ssl__stream_service.shutdown_service [*shutdown_service]]]
- [Destroy all user-defined handler objects owned by the service. ]
+ [[link boost_asio.reference.windows__basic_handle.lowest_layer [*lowest_layer]]]
+ [Get a reference to the lowest layer. ]
   ]
   
   [
- [[link boost_asio.reference.ssl__stream_service.stream_service [*stream_service]]]
- [Construct a new stream service for the specified io_service. ]
+ [[link boost_asio.reference.windows__basic_handle.native [*native]]]
+ [Get the native handle representation. ]
   ]
   
+]
+
+[heading Protected Member Functions]
+[table
+ [[Name][Description]]
+
   [
- [[link boost_asio.reference.ssl__stream_service.write_some [*write_some]]]
- [Write some data to the stream. ]
+ [[link boost_asio.reference.windows__basic_handle._basic_handle [*~basic_handle]]]
+ [Protected destructor to prevent deletion through this type. ]
   ]
   
 ]
 
-[heading Data Members]
+[heading Protected Data Members]
 [table
   [[Name][Description]]
 
   [
- [[link boost_asio.reference.ssl__stream_service.id [*id]]]
- [The unique service identifier. ]
+ [[link boost_asio.reference.windows__basic_handle.implementation [*implementation]]]
+ [The underlying implementation of the I/O object. ]
+ ]
+
+ [
+ [[link boost_asio.reference.windows__basic_handle.service [*service]]]
+ [The service associated with the I/O object. ]
   ]
 
 ]
 
+The windows::basic_handle class template provides the ability to wrap a Windows handle.
 
-[section:async_handshake ssl::stream_service::async_handshake]
 
-Start an asynchronous SSL handshake.
+[heading Thread Safety]
+
+[*Distinct] [*objects:] Safe.
 
- template<
- typename Stream,
- typename HandshakeHandler>
- void async_handshake(
- impl_type & impl,
- Stream & next_layer,
- stream_base::handshake_type type,
- HandshakeHandler handler);
+[*Shared] [*objects:] Unsafe.
 
 
+[section:assign windows::basic_handle::assign]
 
-[endsect]
+Assign an existing native handle to the handle.
 
+ void ``[link boost_asio.reference.windows__basic_handle.assign.overload1 assign]``(
+ const native_type & native_handle);
 
+ boost::system::error_code ``[link boost_asio.reference.windows__basic_handle.assign.overload2 assign]``(
+ const native_type & native_handle,
+ boost::system::error_code & ec);
 
-[section:async_read_some ssl::stream_service::async_read_some]
 
-Start an asynchronous read.
+[section:overload1 windows::basic_handle::assign (1 of 2 overloads)]
 
- template<
- typename Stream,
- typename ``[link boost_asio.reference.MutableBufferSequence MutableBufferSequence]``,
- typename ``[link boost_asio.reference.ReadHandler ReadHandler]``>
- void async_read_some(
- impl_type & impl,
- Stream & next_layer,
- const MutableBufferSequence & buffers,
- ReadHandler handler);
+Assign an existing native handle to the handle.
+
+ void assign(
+ const native_type & native_handle);
 
 
 
@@ -37380,55 +45391,52 @@
 
 
 
-[section:async_shutdown ssl::stream_service::async_shutdown]
+[section:overload2 windows::basic_handle::assign (2 of 2 overloads)]
 
-Asynchronously shut down SSL on the stream.
+Assign an existing native handle to the handle.
 
- template<
- typename Stream,
- typename ShutdownHandler>
- void async_shutdown(
- impl_type & impl,
- Stream & next_layer,
- ShutdownHandler handler);
+ boost::system::error_code assign(
+ const native_type & native_handle,
+ boost::system::error_code & ec);
 
 
 
 [endsect]
 
 
+[endsect]
 
-[section:async_write_some ssl::stream_service::async_write_some]
+[section:basic_handle windows::basic_handle::basic_handle]
 
-Start an asynchronous write.
+Construct a basic_handle without opening it.
 
- template<
- typename Stream,
- typename ``[link boost_asio.reference.ConstBufferSequence ConstBufferSequence]``,
- typename ``[link boost_asio.reference.WriteHandler WriteHandler]``>
- void async_write_some(
- impl_type & impl,
- Stream & next_layer,
- const ConstBufferSequence & buffers,
- WriteHandler handler);
+ ``[link boost_asio.reference.windows__basic_handle.basic_handle.overload1 basic_handle]``(
+ boost::asio::io_service & io_service);
 
+ ``[link boost_asio.reference.windows__basic_handle.basic_handle.overload2 basic_handle]``(
+ boost::asio::io_service & io_service,
+ const native_type & native_handle);
 
 
-[endsect]
+[section:overload1 windows::basic_handle::basic_handle (1 of 2 overloads)]
 
+Construct a basic_handle without opening it.
 
+ basic_handle(
+ boost::asio::io_service & io_service);
 
-[section:create ssl::stream_service::create]
 
-Create a new stream implementation.
+This constructor creates a handle without opening it.
 
- template<
- typename Stream,
- typename Context_Service>
- void create(
- impl_type & impl,
- Stream & next_layer,
- basic_context< Context_Service > & context);
+
+[heading Parameters]
+
+
+[variablelist
+
+[[io_service][The io\_service object that the handle will use to dispatch handlers for any asynchronous operations performed on the handle. ]]
+
+]
 
 
 
@@ -37436,60 +45444,73 @@
 
 
 
-[section:destroy ssl::stream_service::destroy]
+[section:overload2 windows::basic_handle::basic_handle (2 of 2 overloads)]
 
-Destroy a stream implementation.
+Construct a basic_handle on an existing native handle.
 
- template<
- typename Stream>
- void destroy(
- impl_type & impl,
- Stream & next_layer);
+ basic_handle(
+ boost::asio::io_service & io_service,
+ const native_type & native_handle);
 
 
+This constructor creates a handle object to hold an existing native handle.
 
-[endsect]
 
+[heading Parameters]
+
 
+[variablelist
+
+[[io_service][The io\_service object that the handle will use to dispatch handlers for any asynchronous operations performed on the handle.]]
 
-[section:get_io_service ssl::stream_service::get_io_service]
+[[native_handle][A native handle.]]
 
+]
 
-['Inherited from io_service.]
+[heading Exceptions]
+
 
-Get the io_service object that owns the service.
+[variablelist
+
+[[boost::system::system_error][Thrown on failure. ]]
 
- boost::asio::io_service & get_io_service();
+]
 
 
 
 [endsect]
 
 
+[endsect]
 
-[section:handshake ssl::stream_service::handshake]
+[section:cancel windows::basic_handle::cancel]
 
-Perform SSL handshaking.
+Can