[boost-doc-zh] r375 committed - 升级至1.41.0,第一批,libs/目录下a子目录

  • From: boost-doc-zh@xxxxxxxxxxxxxx
  • To: boost-doc-zh-notify@xxxxxxxxxxxxx
  • Date: Mon, 08 Feb 2010 02:58:43 +0000

Revision: 375
Author: alai04
Date: Sun Feb  7 18:57:55 2010
Log: 升级至1.41.0,第一批,libs/目录下a子目录
http://code.google.com/p/boost-doc-zh/source/detail?r=375

Added:
 /trunk/libs/asio/doc/Jamfile.v2
 /trunk/libs/asio/doc/asio.qbk
 /trunk/libs/asio/doc/doxy2qbk.pl
 /trunk/libs/asio/doc/examples.qbk
 /trunk/libs/asio/doc/history.qbk
 /trunk/libs/asio/doc/noncopyable_dox.txt
 /trunk/libs/asio/doc/overview/allocation.qbk
 /trunk/libs/asio/doc/overview/async.qbk
 /trunk/libs/asio/doc/overview/async_op1.dot
 /trunk/libs/asio/doc/overview/async_op2.dot
 /trunk/libs/asio/doc/overview/basics.qbk
 /trunk/libs/asio/doc/overview/bsd_sockets.qbk
 /trunk/libs/asio/doc/overview/buffers.qbk
 /trunk/libs/asio/doc/overview/implementation.qbk
 /trunk/libs/asio/doc/overview/iostreams.qbk
 /trunk/libs/asio/doc/overview/line_based.qbk
 /trunk/libs/asio/doc/overview/posix.qbk
 /trunk/libs/asio/doc/overview/proactor.dot
 /trunk/libs/asio/doc/overview/protocols.qbk
 /trunk/libs/asio/doc/overview/rationale.qbk
 /trunk/libs/asio/doc/overview/reactor.qbk
 /trunk/libs/asio/doc/overview/serial_ports.qbk
 /trunk/libs/asio/doc/overview/ssl.qbk
 /trunk/libs/asio/doc/overview/strands.qbk
 /trunk/libs/asio/doc/overview/streams.qbk
 /trunk/libs/asio/doc/overview/sync_op.dot
 /trunk/libs/asio/doc/overview/threads.qbk
 /trunk/libs/asio/doc/overview/timers.qbk
 /trunk/libs/asio/doc/overview/windows.qbk
 /trunk/libs/asio/doc/overview.qbk
 /trunk/libs/asio/doc/reference.dox
 /trunk/libs/asio/doc/reference.qbk
 /trunk/libs/asio/doc/reference.xsl
 /trunk/libs/asio/doc/requirements
 /trunk/libs/asio/doc/requirements/AcceptHandler.qbk
 /trunk/libs/asio/doc/requirements/AsyncRandomAccessReadDevice.qbk
 /trunk/libs/asio/doc/requirements/AsyncRandomAccessWriteDevice.qbk
 /trunk/libs/asio/doc/requirements/AsyncReadStream.qbk
 /trunk/libs/asio/doc/requirements/AsyncWriteStream.qbk
 /trunk/libs/asio/doc/requirements/CompletionHandler.qbk
 /trunk/libs/asio/doc/requirements/ConnectHandler.qbk
 /trunk/libs/asio/doc/requirements/ConstBufferSequence.qbk
 /trunk/libs/asio/doc/requirements/ConvertibleToConstBuffer.qbk
 /trunk/libs/asio/doc/requirements/ConvertibleToMutableBuffer.qbk
 /trunk/libs/asio/doc/requirements/DatagramSocketService.qbk
 /trunk/libs/asio/doc/requirements/DescriptorService.qbk
 /trunk/libs/asio/doc/requirements/Endpoint.qbk
 /trunk/libs/asio/doc/requirements/GettableSerialPortOption.qbk
 /trunk/libs/asio/doc/requirements/GettableSocketOption.qbk
 /trunk/libs/asio/doc/requirements/HandleService.qbk
 /trunk/libs/asio/doc/requirements/Handler.qbk
 /trunk/libs/asio/doc/requirements/InternetProtocol.qbk
 /trunk/libs/asio/doc/requirements/IoControlCommand.qbk
 /trunk/libs/asio/doc/requirements/IoObjectService.qbk
 /trunk/libs/asio/doc/requirements/MutableBufferSequence.qbk
 /trunk/libs/asio/doc/requirements/Protocol.qbk
 /trunk/libs/asio/doc/requirements/RandomAccessHandleService.qbk
 /trunk/libs/asio/doc/requirements/RawSocketService.qbk
 /trunk/libs/asio/doc/requirements/ReadHandler.qbk
 /trunk/libs/asio/doc/requirements/ResolveHandler.qbk
 /trunk/libs/asio/doc/requirements/ResolverService.qbk
 /trunk/libs/asio/doc/requirements/SerialPortService.qbk
 /trunk/libs/asio/doc/requirements/Service.qbk
 /trunk/libs/asio/doc/requirements/SettableSerialPortOption.qbk
 /trunk/libs/asio/doc/requirements/SettableSocketOption.qbk
 /trunk/libs/asio/doc/requirements/SocketAcceptorService.qbk
 /trunk/libs/asio/doc/requirements/SocketService.qbk
 /trunk/libs/asio/doc/requirements/StreamDescriptorService.qbk
 /trunk/libs/asio/doc/requirements/StreamHandleService.qbk
 /trunk/libs/asio/doc/requirements/StreamSocketService.qbk
 /trunk/libs/asio/doc/requirements/SyncRandomAccessReadDevice.qbk
 /trunk/libs/asio/doc/requirements/SyncRandomAccessWriteDevice.qbk
 /trunk/libs/asio/doc/requirements/SyncReadStream.qbk
 /trunk/libs/asio/doc/requirements/SyncWriteStream.qbk
 /trunk/libs/asio/doc/requirements/TimeTraits.qbk
 /trunk/libs/asio/doc/requirements/TimerService.qbk
 /trunk/libs/asio/doc/requirements/WaitHandler.qbk
 /trunk/libs/asio/doc/requirements/WriteHandler.qbk
 /trunk/libs/asio/doc/requirements/asynchronous_operations.qbk
 /trunk/libs/asio/doc/requirements.qbk
 /trunk/libs/asio/doc/std_exception_dox.txt
 /trunk/libs/asio/doc/tutorial.dox
 /trunk/libs/asio/doc/tutorial.qbk
 /trunk/libs/asio/doc/tutorial.xsl
 /trunk/libs/asio/doc/using.qbk
 /trunk/libs/asio/example/allocation
 /trunk/libs/asio/example/allocation/Jamfile
 /trunk/libs/asio/example/allocation/Jamfile.v2
 /trunk/libs/asio/example/allocation/server.cpp
 /trunk/libs/asio/example/buffers
 /trunk/libs/asio/example/buffers/Jamfile
 /trunk/libs/asio/example/buffers/Jamfile.v2
 /trunk/libs/asio/example/buffers/reference_counted.cpp
 /trunk/libs/asio/example/chat
 /trunk/libs/asio/example/chat/Jamfile
 /trunk/libs/asio/example/chat/Jamfile.v2
 /trunk/libs/asio/example/chat/chat_client.cpp
 /trunk/libs/asio/example/chat/chat_message.hpp
 /trunk/libs/asio/example/chat/chat_server.cpp
 /trunk/libs/asio/example/chat/posix_chat_client.cpp
 /trunk/libs/asio/example/echo
 /trunk/libs/asio/example/echo/Jamfile
 /trunk/libs/asio/example/echo/Jamfile.v2
 /trunk/libs/asio/example/echo/async_tcp_echo_server.cpp
 /trunk/libs/asio/example/echo/async_udp_echo_server.cpp
 /trunk/libs/asio/example/echo/blocking_tcp_echo_client.cpp
 /trunk/libs/asio/example/echo/blocking_tcp_echo_server.cpp
 /trunk/libs/asio/example/echo/blocking_udp_echo_client.cpp
 /trunk/libs/asio/example/echo/blocking_udp_echo_server.cpp
 /trunk/libs/asio/example/http/client
 /trunk/libs/asio/example/http/client/Jamfile
 /trunk/libs/asio/example/http/client/Jamfile.v2
 /trunk/libs/asio/example/http/client/async_client.cpp
 /trunk/libs/asio/example/http/client/sync_client.cpp
 /trunk/libs/asio/example/http/server
 /trunk/libs/asio/example/http/server/Jamfile
 /trunk/libs/asio/example/http/server/Jamfile.v2
 /trunk/libs/asio/example/http/server/connection.cpp
 /trunk/libs/asio/example/http/server/connection.hpp
 /trunk/libs/asio/example/http/server/connection_manager.cpp
 /trunk/libs/asio/example/http/server/connection_manager.hpp
 /trunk/libs/asio/example/http/server/header.hpp
 /trunk/libs/asio/example/http/server/mime_types.cpp
 /trunk/libs/asio/example/http/server/mime_types.hpp
 /trunk/libs/asio/example/http/server/posix_main.cpp
 /trunk/libs/asio/example/http/server/reply.cpp
 /trunk/libs/asio/example/http/server/reply.hpp
 /trunk/libs/asio/example/http/server/request.hpp
 /trunk/libs/asio/example/http/server/request_handler.cpp
 /trunk/libs/asio/example/http/server/request_handler.hpp
 /trunk/libs/asio/example/http/server/request_parser.cpp
 /trunk/libs/asio/example/http/server/request_parser.hpp
 /trunk/libs/asio/example/http/server/server.cpp
 /trunk/libs/asio/example/http/server/server.hpp
 /trunk/libs/asio/example/http/server/win_main.cpp
 /trunk/libs/asio/example/http/server2
 /trunk/libs/asio/example/http/server2/Jamfile
 /trunk/libs/asio/example/http/server2/Jamfile.v2
 /trunk/libs/asio/example/http/server2/connection.cpp
 /trunk/libs/asio/example/http/server2/connection.hpp
 /trunk/libs/asio/example/http/server2/header.hpp
 /trunk/libs/asio/example/http/server2/io_service_pool.cpp
 /trunk/libs/asio/example/http/server2/io_service_pool.hpp
 /trunk/libs/asio/example/http/server2/mime_types.cpp
 /trunk/libs/asio/example/http/server2/mime_types.hpp
 /trunk/libs/asio/example/http/server2/posix_main.cpp
 /trunk/libs/asio/example/http/server2/reply.cpp
 /trunk/libs/asio/example/http/server2/reply.hpp
 /trunk/libs/asio/example/http/server2/request.hpp
 /trunk/libs/asio/example/http/server2/request_handler.cpp
 /trunk/libs/asio/example/http/server2/request_handler.hpp
 /trunk/libs/asio/example/http/server2/request_parser.cpp
 /trunk/libs/asio/example/http/server2/request_parser.hpp
 /trunk/libs/asio/example/http/server2/server.cpp
 /trunk/libs/asio/example/http/server2/server.hpp
 /trunk/libs/asio/example/http/server2/win_main.cpp
 /trunk/libs/asio/example/http/server3
 /trunk/libs/asio/example/http/server3/Jamfile
 /trunk/libs/asio/example/http/server3/Jamfile.v2
 /trunk/libs/asio/example/http/server3/connection.cpp
 /trunk/libs/asio/example/http/server3/connection.hpp
 /trunk/libs/asio/example/http/server3/header.hpp
 /trunk/libs/asio/example/http/server3/mime_types.cpp
 /trunk/libs/asio/example/http/server3/mime_types.hpp
 /trunk/libs/asio/example/http/server3/posix_main.cpp
 /trunk/libs/asio/example/http/server3/reply.cpp
 /trunk/libs/asio/example/http/server3/reply.hpp
 /trunk/libs/asio/example/http/server3/request.hpp
 /trunk/libs/asio/example/http/server3/request_handler.cpp
 /trunk/libs/asio/example/http/server3/request_handler.hpp
 /trunk/libs/asio/example/http/server3/request_parser.cpp
 /trunk/libs/asio/example/http/server3/request_parser.hpp
 /trunk/libs/asio/example/http/server3/server.cpp
 /trunk/libs/asio/example/http/server3/server.hpp
 /trunk/libs/asio/example/http/server3/win_main.cpp
 /trunk/libs/asio/example/http/server4
 /trunk/libs/asio/example/http/server4/Jamfile
 /trunk/libs/asio/example/http/server4/Jamfile.v2
 /trunk/libs/asio/example/http/server4/coroutine.hpp
 /trunk/libs/asio/example/http/server4/file_handler.cpp
 /trunk/libs/asio/example/http/server4/file_handler.hpp
 /trunk/libs/asio/example/http/server4/header.hpp
 /trunk/libs/asio/example/http/server4/mime_types.cpp
 /trunk/libs/asio/example/http/server4/mime_types.hpp
 /trunk/libs/asio/example/http/server4/posix_main.cpp
 /trunk/libs/asio/example/http/server4/reply.cpp
 /trunk/libs/asio/example/http/server4/reply.hpp
 /trunk/libs/asio/example/http/server4/request.hpp
 /trunk/libs/asio/example/http/server4/request_parser.cpp
 /trunk/libs/asio/example/http/server4/request_parser.hpp
 /trunk/libs/asio/example/http/server4/server.cpp
 /trunk/libs/asio/example/http/server4/server.hpp
 /trunk/libs/asio/example/http/server4/unyield.hpp
 /trunk/libs/asio/example/http/server4/win_main.cpp
 /trunk/libs/asio/example/http/server4/yield.hpp
 /trunk/libs/asio/example/icmp
 /trunk/libs/asio/example/icmp/Jamfile
 /trunk/libs/asio/example/icmp/Jamfile.v2
 /trunk/libs/asio/example/icmp/icmp_header.hpp
 /trunk/libs/asio/example/icmp/ipv4_header.hpp
 /trunk/libs/asio/example/icmp/ping.cpp
 /trunk/libs/asio/example/invocation
 /trunk/libs/asio/example/invocation/Jamfile
 /trunk/libs/asio/example/invocation/Jamfile.v2
 /trunk/libs/asio/example/invocation/prioritised_handlers.cpp
 /trunk/libs/asio/example/iostreams
 /trunk/libs/asio/example/iostreams/Jamfile
 /trunk/libs/asio/example/iostreams/Jamfile.v2
 /trunk/libs/asio/example/iostreams/daytime_client.cpp
 /trunk/libs/asio/example/iostreams/daytime_server.cpp
 /trunk/libs/asio/example/local
 /trunk/libs/asio/example/local/Jamfile
 /trunk/libs/asio/example/local/Jamfile.v2
 /trunk/libs/asio/example/local/connect_pair.cpp
 /trunk/libs/asio/example/local/iostream_client.cpp
 /trunk/libs/asio/example/local/stream_client.cpp
 /trunk/libs/asio/example/local/stream_server.cpp
 /trunk/libs/asio/example/multicast
 /trunk/libs/asio/example/multicast/Jamfile
 /trunk/libs/asio/example/multicast/Jamfile.v2
 /trunk/libs/asio/example/multicast/receiver.cpp
 /trunk/libs/asio/example/multicast/sender.cpp
 /trunk/libs/asio/example/nonblocking
 /trunk/libs/asio/example/nonblocking/Jamfile
 /trunk/libs/asio/example/nonblocking/Jamfile.v2
 /trunk/libs/asio/example/nonblocking/third_party_lib.cpp
 /trunk/libs/asio/example/porthopper
 /trunk/libs/asio/example/porthopper/Jamfile
 /trunk/libs/asio/example/porthopper/Jamfile.v2
 /trunk/libs/asio/example/porthopper/client.cpp
 /trunk/libs/asio/example/porthopper/protocol.hpp
 /trunk/libs/asio/example/porthopper/server.cpp
 /trunk/libs/asio/example/serialization
 /trunk/libs/asio/example/serialization/Jamfile
 /trunk/libs/asio/example/serialization/Jamfile.v2
 /trunk/libs/asio/example/serialization/client.cpp
 /trunk/libs/asio/example/serialization/connection.hpp
 /trunk/libs/asio/example/serialization/server.cpp
 /trunk/libs/asio/example/serialization/stock.hpp
 /trunk/libs/asio/example/services
 /trunk/libs/asio/example/services/Jamfile
 /trunk/libs/asio/example/services/Jamfile.v2
 /trunk/libs/asio/example/services/basic_logger.hpp
 /trunk/libs/asio/example/services/daytime_client.cpp
 /trunk/libs/asio/example/services/logger.hpp
 /trunk/libs/asio/example/services/logger_service.cpp
 /trunk/libs/asio/example/services/logger_service.hpp
 /trunk/libs/asio/example/services/stream_socket_service.hpp
 /trunk/libs/asio/example/socks4
 /trunk/libs/asio/example/socks4/Jamfile
 /trunk/libs/asio/example/socks4/Jamfile.v2
 /trunk/libs/asio/example/socks4/socks4.hpp
 /trunk/libs/asio/example/socks4/sync_client.cpp
 /trunk/libs/asio/example/ssl
 /trunk/libs/asio/example/ssl/Jamfile
 /trunk/libs/asio/example/ssl/Jamfile.v2
 /trunk/libs/asio/example/ssl/README
 /trunk/libs/asio/example/ssl/ca.pem
 /trunk/libs/asio/example/ssl/client.cpp
 /trunk/libs/asio/example/ssl/dh512.pem
 /trunk/libs/asio/example/ssl/server.cpp
 /trunk/libs/asio/example/ssl/server.pem
 /trunk/libs/asio/example/timeouts
 /trunk/libs/asio/example/timeouts/Jamfile
 /trunk/libs/asio/example/timeouts/Jamfile.v2
 /trunk/libs/asio/example/timeouts/accept_timeout.cpp
 /trunk/libs/asio/example/timeouts/connect_timeout.cpp
 /trunk/libs/asio/example/timeouts/datagram_receive_timeout.cpp
 /trunk/libs/asio/example/timeouts/stream_receive_timeout.cpp
 /trunk/libs/asio/example/timers
 /trunk/libs/asio/example/timers/Jamfile
 /trunk/libs/asio/example/timers/Jamfile.v2
 /trunk/libs/asio/example/timers/tick_count_timer.cpp
 /trunk/libs/asio/example/timers/time_t_timer.cpp
 /trunk/libs/asio/example/tutorial
 /trunk/libs/asio/example/tutorial/Jamfile
 /trunk/libs/asio/example/tutorial/Jamfile.v2
 /trunk/libs/asio/example/tutorial/daytime1
 /trunk/libs/asio/example/tutorial/daytime1/client.cpp
 /trunk/libs/asio/example/tutorial/daytime2
 /trunk/libs/asio/example/tutorial/daytime2/server.cpp
 /trunk/libs/asio/example/tutorial/daytime3
 /trunk/libs/asio/example/tutorial/daytime3/server.cpp
 /trunk/libs/asio/example/tutorial/daytime4
 /trunk/libs/asio/example/tutorial/daytime4/client.cpp
 /trunk/libs/asio/example/tutorial/daytime5
 /trunk/libs/asio/example/tutorial/daytime5/server.cpp
 /trunk/libs/asio/example/tutorial/daytime6
 /trunk/libs/asio/example/tutorial/daytime6/server.cpp
 /trunk/libs/asio/example/tutorial/daytime7
 /trunk/libs/asio/example/tutorial/daytime7/server.cpp
 /trunk/libs/asio/example/tutorial/daytime_dox.txt
 /trunk/libs/asio/example/tutorial/index_dox.txt
 /trunk/libs/asio/example/tutorial/timer1
 /trunk/libs/asio/example/tutorial/timer1/timer.cpp
 /trunk/libs/asio/example/tutorial/timer2
 /trunk/libs/asio/example/tutorial/timer2/timer.cpp
 /trunk/libs/asio/example/tutorial/timer3
 /trunk/libs/asio/example/tutorial/timer3/timer.cpp
 /trunk/libs/asio/example/tutorial/timer4
 /trunk/libs/asio/example/tutorial/timer4/timer.cpp
 /trunk/libs/asio/example/tutorial/timer5
 /trunk/libs/asio/example/tutorial/timer5/timer.cpp
 /trunk/libs/asio/example/tutorial/timer_dox.txt
 /trunk/libs/asio/example/windows
 /trunk/libs/asio/example/windows/Jamfile
 /trunk/libs/asio/example/windows/Jamfile.v2
 /trunk/libs/asio/example/windows/transmit_file.cpp
 /trunk/libs/asio/test
 /trunk/libs/asio/test/Jamfile
 /trunk/libs/asio/test/Jamfile.v2
 /trunk/libs/asio/test/archetypes
 /trunk/libs/asio/test/archetypes/io_control_command.hpp
 /trunk/libs/asio/test/basic_datagram_socket.cpp
 /trunk/libs/asio/test/basic_deadline_timer.cpp
 /trunk/libs/asio/test/basic_serial_port.cpp
 /trunk/libs/asio/test/basic_socket_acceptor.cpp
 /trunk/libs/asio/test/basic_stream_socket.cpp
 /trunk/libs/asio/test/buffer.cpp
 /trunk/libs/asio/test/buffered_read_stream.cpp
 /trunk/libs/asio/test/buffered_stream.cpp
 /trunk/libs/asio/test/buffered_write_stream.cpp
 /trunk/libs/asio/test/buffers_iterator.cpp
 /trunk/libs/asio/test/completion_condition.cpp
 /trunk/libs/asio/test/datagram_socket_service.cpp
 /trunk/libs/asio/test/deadline_timer.cpp
 /trunk/libs/asio/test/deadline_timer_service.cpp
 /trunk/libs/asio/test/error.cpp
 /trunk/libs/asio/test/io_service.cpp
 /trunk/libs/asio/test/ip
 /trunk/libs/asio/test/ip/address.cpp
 /trunk/libs/asio/test/ip/address_v4.cpp
 /trunk/libs/asio/test/ip/address_v6.cpp
 /trunk/libs/asio/test/ip/basic_endpoint.cpp
 /trunk/libs/asio/test/ip/basic_resolver.cpp
 /trunk/libs/asio/test/ip/basic_resolver_entry.cpp
 /trunk/libs/asio/test/ip/basic_resolver_iterator.cpp
 /trunk/libs/asio/test/ip/basic_resolver_query.cpp
 /trunk/libs/asio/test/ip/host_name.cpp
 /trunk/libs/asio/test/ip/multicast.cpp
 /trunk/libs/asio/test/ip/resolver_query_base.cpp
 /trunk/libs/asio/test/ip/resolver_service.cpp
 /trunk/libs/asio/test/ip/tcp.cpp
 /trunk/libs/asio/test/ip/udp.cpp
 /trunk/libs/asio/test/ip/unicast.cpp
 /trunk/libs/asio/test/ip/v6_only.cpp
 /trunk/libs/asio/test/is_read_buffered.cpp
 /trunk/libs/asio/test/is_write_buffered.cpp
 /trunk/libs/asio/test/local
 /trunk/libs/asio/test/local/basic_endpoint.cpp
 /trunk/libs/asio/test/local/connect_pair.cpp
 /trunk/libs/asio/test/local/datagram_protocol.cpp
 /trunk/libs/asio/test/local/stream_protocol.cpp
 /trunk/libs/asio/test/placeholders.cpp
 /trunk/libs/asio/test/posix
 /trunk/libs/asio/test/posix/basic_descriptor.cpp
 /trunk/libs/asio/test/posix/basic_stream_descriptor.cpp
 /trunk/libs/asio/test/posix/descriptor_base.cpp
 /trunk/libs/asio/test/posix/stream_descriptor.cpp
 /trunk/libs/asio/test/posix/stream_descriptor_service.cpp
 /trunk/libs/asio/test/read.cpp
 /trunk/libs/asio/test/read_at.cpp
 /trunk/libs/asio/test/read_until.cpp
 /trunk/libs/asio/test/serial_port.cpp
 /trunk/libs/asio/test/serial_port_base.cpp
 /trunk/libs/asio/test/serial_port_service.cpp
 /trunk/libs/asio/test/socket_acceptor_service.cpp
 /trunk/libs/asio/test/socket_base.cpp
 /trunk/libs/asio/test/ssl
 /trunk/libs/asio/test/ssl/Jamfile
 /trunk/libs/asio/test/ssl/Jamfile.v2
 /trunk/libs/asio/test/ssl/basic_context.cpp
 /trunk/libs/asio/test/ssl/context.cpp
 /trunk/libs/asio/test/ssl/context_base.cpp
 /trunk/libs/asio/test/ssl/context_service.cpp
 /trunk/libs/asio/test/ssl/stream.cpp
 /trunk/libs/asio/test/ssl/stream_base.cpp
 /trunk/libs/asio/test/ssl/stream_service.cpp
 /trunk/libs/asio/test/strand.cpp
 /trunk/libs/asio/test/stream_socket_service.cpp
 /trunk/libs/asio/test/time_traits.cpp
 /trunk/libs/asio/test/unit_test.hpp
 /trunk/libs/asio/test/windows
 /trunk/libs/asio/test/windows/basic_handle.cpp
 /trunk/libs/asio/test/windows/basic_random_access_handle.cpp
 /trunk/libs/asio/test/windows/basic_stream_handle.cpp
 /trunk/libs/asio/test/windows/overlapped_ptr.cpp
 /trunk/libs/asio/test/windows/random_access_handle.cpp
 /trunk/libs/asio/test/windows/random_access_handle_service.cpp
 /trunk/libs/asio/test/windows/stream_handle.cpp
 /trunk/libs/asio/test/windows/stream_handle_service.cpp
 /trunk/libs/asio/test/write.cpp
 /trunk/libs/asio/test/write_at.cpp
Modified:
 /trunk/libs/accumulators/doc/accumulators.qbk
 /trunk/libs/array/doc/array.xml
 /trunk/libs/asio/doc/index.xml
 /trunk/libs/asio/doc/quickref.xml
 /trunk/libs/asio/example/http/doc_root/data_1K.html
 /trunk/libs/asio/example/http/doc_root/data_2K.html
 /trunk/libs/asio/example/http/doc_root/data_4K.html
 /trunk/libs/asio/example/http/doc_root/data_8K.html

=======================================
--- /dev/null
+++ /trunk/libs/asio/doc/Jamfile.v2     Sun Feb  7 18:57:55 2010
@@ -0,0 +1,114 @@
+#
+# Copyright (c) 2003-2010 Christopher M. Kohlhoff (chris at kohlhoff dot com)
+#
+# 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)
+#
+
+using quickbook ;
+
+########################################################################
+# Standalone HTML documentation
+
+xml standalone_doc
+  :
+    asio.qbk
+  ;
+
+install css
+  :
+    /boost//doc/html/boostbook.css
+  :
+    <location>html
+  ;
+
+install images
+  :
+    overview/proactor.png
+    overview/sync_op.png
+    overview/async_op1.png
+    overview/async_op2.png
+  :
+    <location>html/boost_asio
+  ;
+
+local example-names = allocation buffers chat echo http/client http/server
+  http/server2 http/server3 http/server4 icmp invocation iostreams local
+ multicast nonblocking porthopper serialization services socks4 ssl timeouts
+  timers windows ;
+
+for local l in $(example-names)
+{
+ install ex_$(l) : [ glob ../example/$(l)/*.*pp ] : <location>html/boost_asio/example/$(l) ;
+}
+
+boostbook standalone
+  :
+    standalone_doc
+  :
+    <xsl:param>boost.root=../../../..
+    <xsl:param>boost.libraries=../../../../libs/libraries.htm
+    <xsl:param>navig.graphics.path="../../../../doc/html/images/"
+    <xsl:param>chapter.autolabel=0
+    <xsl:param>chunk.section.depth=8
+    <xsl:param>chunk.first.sections=1
+    <xsl:param>toc.section.depth=2
+    <xsl:param>toc.max.depth=1
+    <xsl:param>generate.section.toc.level=1
+    <xsl:param>generate.toc="chapter nop section nop"
+ <format>pdf:<xsl:param>boost.url.prefix=http://www.boost.org/doc/libs/release/libs/asio/doc/html
+  ;
+
+########################################################################
+# HTML documentation for $(BOOST_ROOT)/doc/html
+
+xml asio_doc
+  :
+    asio.qbk
+  ;
+
+explicit asio_doc ;
+
+install asio_doc_images
+  :
+    overview/proactor.png
+    overview/sync_op.png
+    overview/async_op1.png
+    overview/async_op2.png
+  :
+    <location>$(BOOST_ROOT)/doc/html/boost_asio
+  ;
+
+explicit asio_doc_images ;
+
+for local l in $(example-names)
+{
+ install asio_ex_$(l) : [ glob ../example/$(l)/*.*pp ] : <location>$(BOOST_ROOT)/doc/html/boost_asio/example/$(l) ;
+  explicit asio_ex_$(l) ;
+}
+
+alias asio_examples : asio_ex_$(example-names) ;
+
+explicit asio_examples ;
+
+path-constant images_location : ../../../doc/html ;
+
+boostbook asio
+  :
+    asio_doc
+  :
+    <xsl:param>chapter.autolabel=0
+    <xsl:param>chunk.section.depth=8
+    <xsl:param>chunk.first.sections=1
+    <xsl:param>toc.section.depth=2
+    <xsl:param>toc.max.depth=1
+    <xsl:param>generate.section.toc.level=1
+    <xsl:param>generate.toc="chapter nop section nop"
+    <xsl:param>root.filename=boost_asio
+    <format>pdf:<xsl:param>img.src.path=$(images_location)/
+  :
+    <dependency>asio_doc_images
+    <dependency>asio_examples
+  ;
+
+explicit asio ;
=======================================
--- /dev/null
+++ /trunk/libs/asio/doc/asio.qbk       Sun Feb  7 18:57:55 2010
@@ -0,0 +1,113 @@
+[/
+ / Copyright (c) 2003-2010 Christopher M. Kohlhoff (chris at kohlhoff dot com)
+ /
+ / 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)
+ /]
+
+[library Boost.Asio
+    [quickbook 1.4]
+    [copyright 2003 - 2010 Christopher M. Kohlhoff]
+    [purpose Networking library]
+    [license
+        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])
+    ]
+    [authors [Kohlhoff, Christopher]]
+    [category template]
+    [category generic]
+]
+
+[template mdash[] '''&mdash; ''']
+[template indexterm1[term1] '''<indexterm><primary>'''[term1]'''</primary></indexterm>'''] +[template indexterm2[term1 term2] '''<indexterm><primary>'''[term1]'''</primary><secondary>'''[term2]'''</secondary></indexterm>''']
+[def __POSIX__ /POSIX/]
+[def __Windows__ /Windows/]
+[def __accept__ [@http://www.opengroup.org/onlinepubs/000095399/functions/accept.html `accept()`]] +[def __connect__ [@http://www.opengroup.org/onlinepubs/000095399/functions/connect.html `connect()`]] +[def __getpeername__ [@http://www.opengroup.org/onlinepubs/000095399/functions/getpeername.html `getpeername()`]] +[def __getsockname__ [@http://www.opengroup.org/onlinepubs/000095399/functions/getsockname.html `getsockname()`]] +[def __getsockopt__ [@http://www.opengroup.org/onlinepubs/000095399/functions/getsockopt.html `getsockopt()`]] +[def __ioctl__ [@http://www.opengroup.org/onlinepubs/000095399/functions/ioctl.html `ioctl()`]] +[def __recvfrom__ [@http://www.opengroup.org/onlinepubs/000095399/functions/recvfrom.html `recvfrom()`]] +[def __sendto__ [@http://www.opengroup.org/onlinepubs/000095399/functions/sendto.html `sendto()`]] +[def __setsockopt__ [@http://www.opengroup.org/onlinepubs/000095399/functions/setsockopt.html `setsockopt()`]] +[def __socket__ [@http://www.opengroup.org/onlinepubs/000095399/functions/socket.html `socket()`]]
+
+[/=============================================================================]
+
+Boost.Asio is a cross-platform C++ library for network and low-level I/O
+programming that provides developers with a consistent asynchronous model using
+a modern C++ approach.
+
+[variablelist
+  [
+    [
+      [link boost_asio.overview Overview]
+    ]
+    [
+ An overview of the features included in Boost.Asio, plus rationale and design information.
+    ]
+  ]
+  [
+    [
+      [link boost_asio.using Using Boost.Asio]
+    ]
+    [
+      How to use Boost.Asio in your applications. Includes information on
+      library dependencies and supported platforms.
+    ]
+  ]
+  [
+    [
+      [link boost_asio.tutorial Tutorial]
+    ]
+    [
+      A tutorial that introduces the fundamental concepts required to use
+ Boost.Asio, and shows how to use Boost.Asio to develop simple client and
+      server programs.
+    ]
+  ]
+  [
+    [
+      [link boost_asio.examples Examples]
+    ]
+    [
+      Examples that illustrate the use of Boost.Asio in more complex
+      applications.
+    ]
+  ]
+  [
+    [
+      [link boost_asio.reference Reference]
+    ]
+    [
+      Detailed class and function reference.
+    ]
+  ]
+  [
+    [
+      [link boost_asio.history Revision History]
+    ]
+    [
+      Log of Boost.Asio changes made in each Boost release.
+    ]
+  ]
+  [
+    [
+      [link boost_asio.index Index]
+    ]
+    [
+      Book-style text index of Boost.Asio documentation.
+    ]
+  ]
+]
+
+[include overview.qbk]
+[include using.qbk]
+[include tutorial.qbk]
+[include examples.qbk]
+[include reference.qbk]
+[include history.qbk]
+[xinclude index.xml]
=======================================
--- /dev/null
+++ /trunk/libs/asio/doc/doxy2qbk.pl    Sun Feb  7 18:57:55 2010
@@ -0,0 +1,22 @@
+#!/usr/bin/perl -w
+
+# Copyright (c) 2003-2010 Christopher M. Kohlhoff (chris at kohlhoff dot com)
+#
+# 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)
+
+use strict;
+
+system("doxygen reference.dox");
+chdir("xml");
+system("xsltproc combine.xslt index.xml > all.xml");
+chdir("..");
+system("xsltproc reference.xsl xml/all.xml > reference.qbk");
+system("rm -rf xml");
+
+system("doxygen tutorial.dox");
+chdir("xml");
+system("xsltproc combine.xslt index.xml > all.xml");
+chdir("..");
+system("xsltproc tutorial.xsl xml/all.xml > tutorial.qbk");
+system("rm -rf xml reference.tags");
=======================================
--- /dev/null
+++ /trunk/libs/asio/doc/examples.qbk   Sun Feb  7 18:57:55 2010
@@ -0,0 +1,295 @@
+[/
+ / Copyright (c) 2003-2010 Christopher M. Kohlhoff (chris at kohlhoff dot com)
+ /
+ / 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)
+ /]
+
+[section:examples Examples]
+
+
+[heading Allocation]
+
+This example shows how to customise the allocation of memory associated with
+asynchronous operations.
+
+* [@boost_asio/example/allocation/server.cpp]
+
+
+[heading Buffers]
+
+This example demonstrates how to create reference counted buffers that can be
+used with socket read and write operations.
+
+* [@boost_asio/example/buffers/reference_counted.cpp]
+
+
+[heading Chat]
+
+This example implements a chat server and client. The programs use a custom
+protocol with a fixed length message header and variable length message body.
+
+* [@boost_asio/example/chat/chat_message.hpp]
+* [@boost_asio/example/chat/chat_client.cpp]
+* [@boost_asio/example/chat/chat_server.cpp]
+
+The following POSIX-specific chat client demonstrates how to use the
+[link boost_asio.reference.posix__stream_descriptor posix::stream_descriptor]
+class to perform console input and output.
+
+* [@boost_asio/example/chat/posix_chat_client.cpp]
+
+
+[heading Echo]
+
+A collection of simple clients and servers, showing the use of both synchronous
+and asynchronous operations.
+
+* [@boost_asio/example/echo/async_tcp_echo_server.cpp]
+* [@boost_asio/example/echo/async_udp_echo_server.cpp]
+* [@boost_asio/example/echo/blocking_tcp_echo_client.cpp]
+* [@boost_asio/example/echo/blocking_tcp_echo_server.cpp]
+* [@boost_asio/example/echo/blocking_udp_echo_client.cpp]
+* [@boost_asio/example/echo/blocking_udp_echo_server.cpp]
+
+
+[heading HTTP Client]
+
+Example programs implementing simple HTTP 1.0 clients. These examples show how
+to use the [link boost_asio.reference.read_until read_until] and [link
+boost_asio.reference.async_read_until async_read_until] functions.
+
+* [@boost_asio/example/http/client/sync_client.cpp]
+* [@boost_asio/example/http/client/async_client.cpp]
+
+
+[heading HTTP Server]
+
+This example illustrates the use of asio in a simple single-threaded server
+implementation of HTTP 1.0. It demonstrates how to perform a clean shutdown by
+cancelling all outstanding asynchronous operations.
+
+* [@boost_asio/example/http/server/connection.cpp]
+* [@boost_asio/example/http/server/connection.hpp]
+* [@boost_asio/example/http/server/connection_manager.cpp]
+* [@boost_asio/example/http/server/connection_manager.hpp]
+* [@boost_asio/example/http/server/header.hpp]
+* [@boost_asio/example/http/server/mime_types.cpp]
+* [@boost_asio/example/http/server/mime_types.hpp]
+* [@boost_asio/example/http/server/posix_main.cpp]
+* [@boost_asio/example/http/server/reply.cpp]
+* [@boost_asio/example/http/server/reply.hpp]
+* [@boost_asio/example/http/server/request.hpp]
+* [@boost_asio/example/http/server/request_handler.cpp]
+* [@boost_asio/example/http/server/request_handler.hpp]
+* [@boost_asio/example/http/server/request_parser.cpp]
+* [@boost_asio/example/http/server/request_parser.hpp]
+* [@boost_asio/example/http/server/server.cpp]
+* [@boost_asio/example/http/server/server.hpp]
+* [@boost_asio/example/http/server/win_main.cpp]
+
+
+[heading HTTP Server 2]
+
+An HTTP server using an io_service-per-CPU design.
+
+* [@boost_asio/example/http/server2/connection.cpp]
+* [@boost_asio/example/http/server2/connection.hpp]
+* [@boost_asio/example/http/server2/header.hpp]
+* [@boost_asio/example/http/server2/io_service_pool.cpp]
+* [@boost_asio/example/http/server2/io_service_pool.hpp]
+* [@boost_asio/example/http/server2/mime_types.cpp]
+* [@boost_asio/example/http/server2/mime_types.hpp]
+* [@boost_asio/example/http/server2/posix_main.cpp]
+* [@boost_asio/example/http/server2/reply.cpp]
+* [@boost_asio/example/http/server2/reply.hpp]
+* [@boost_asio/example/http/server2/request.hpp]
+* [@boost_asio/example/http/server2/request_handler.cpp]
+* [@boost_asio/example/http/server2/request_handler.hpp]
+* [@boost_asio/example/http/server2/request_parser.cpp]
+* [@boost_asio/example/http/server2/request_parser.hpp]
+* [@boost_asio/example/http/server2/server.cpp]
+* [@boost_asio/example/http/server2/server.hpp]
+* [@boost_asio/example/http/server2/win_main.cpp]
+
+
+[heading HTTP Server 3]
+
+An HTTP server using a single io_service and a thread pool calling `io_service::run()`.
+
+* [@boost_asio/example/http/server3/connection.cpp]
+* [@boost_asio/example/http/server3/connection.hpp]
+* [@boost_asio/example/http/server3/header.hpp]
+* [@boost_asio/example/http/server3/mime_types.cpp]
+* [@boost_asio/example/http/server3/mime_types.hpp]
+* [@boost_asio/example/http/server3/posix_main.cpp]
+* [@boost_asio/example/http/server3/reply.cpp]
+* [@boost_asio/example/http/server3/reply.hpp]
+* [@boost_asio/example/http/server3/request.hpp]
+* [@boost_asio/example/http/server3/request_handler.cpp]
+* [@boost_asio/example/http/server3/request_handler.hpp]
+* [@boost_asio/example/http/server3/request_parser.cpp]
+* [@boost_asio/example/http/server3/request_parser.hpp]
+* [@boost_asio/example/http/server3/server.cpp]
+* [@boost_asio/example/http/server3/server.hpp]
+* [@boost_asio/example/http/server3/win_main.cpp]
+
+
+[heading HTTP Server 4]
+
+A single-threaded HTTP server implemented using stackless coroutines.
+
+* [@boost_asio/example/http/server4/coroutine.hpp]
+* [@boost_asio/example/http/server4/file_handler.cpp]
+* [@boost_asio/example/http/server4/file_handler.hpp]
+* [@boost_asio/example/http/server4/header.hpp]
+* [@boost_asio/example/http/server4/mime_types.cpp]
+* [@boost_asio/example/http/server4/mime_types.hpp]
+* [@boost_asio/example/http/server4/posix_main.cpp]
+* [@boost_asio/example/http/server4/reply.cpp]
+* [@boost_asio/example/http/server4/reply.hpp]
+* [@boost_asio/example/http/server4/request.hpp]
+* [@boost_asio/example/http/server4/request_parser.cpp]
+* [@boost_asio/example/http/server4/request_parser.hpp]
+* [@boost_asio/example/http/server4/server.cpp]
+* [@boost_asio/example/http/server4/server.hpp]
+* [@boost_asio/example/http/server4/unyield.hpp]
+* [@boost_asio/example/http/server4/win_main.cpp]
+* [@boost_asio/example/http/server4/yield.hpp]
+
+
+[heading ICMP]
+
+This example shows how to use raw sockets with ICMP to ping a remote host.
+
+* [@boost_asio/example/icmp/ping.cpp]
+* [@boost_asio/example/icmp/ipv4_header.hpp]
+* [@boost_asio/example/icmp/icmp_header.hpp]
+
+
+[heading Invocation]
+
+This example shows how to customise handler invocation. Completion handlers are
+added to a priority queue rather than executed immediately.
+
+* [@boost_asio/example/invocation/prioritised_handlers.cpp]
+
+
+[heading Iostreams]
+
+Two examples showing how to use [link boost_asio.reference.ip__tcp.iostream
+ip::tcp::iostream].
+
+* [@boost_asio/example/iostreams/daytime_client.cpp]
+* [@boost_asio/example/iostreams/daytime_server.cpp]
+
+
+[heading Multicast]
+
+An example showing the use of multicast to transmit packets to a group of
+subscribers.
+
+* [@boost_asio/example/multicast/receiver.cpp]
+* [@boost_asio/example/multicast/sender.cpp]
+
+
+[heading Serialization]
+
+This example shows how Boost.Serialization can be used with asio to encode and
+decode structures for transmission over a socket.
+
+* [@boost_asio/example/serialization/client.cpp]
+* [@boost_asio/example/serialization/connection.hpp]
+* [@boost_asio/example/serialization/server.cpp]
+* [@boost_asio/example/serialization/stock.hpp]
+
+
+[heading Services]
+
+This example demonstrates how to integrate custom functionality (in this case, +for logging) into asio's [link boost_asio.reference.io_service io_service], and
+how to use a custom service with [link
+boost_asio.reference.basic_stream_socket basic_stream_socket<>].
+
+* [@boost_asio/example/services/basic_logger.hpp]
+* [@boost_asio/example/services/daytime_client.cpp]
+* [@boost_asio/example/services/logger.hpp]
+* [@boost_asio/example/services/logger_service.cpp]
+* [@boost_asio/example/services/logger_service.hpp]
+* [@boost_asio/example/services/stream_socket_service.hpp]
+
+
+[heading SOCKS 4]
+
+Example client program implementing the SOCKS 4 protocol for communication via
+a proxy.
+
+* [@boost_asio/example/socks4/sync_client.cpp]
+* [@boost_asio/example/socks4/socks4.hpp]
+
+
+[heading SSL]
+
+Example client and server programs showing the use of the [link
+boost_asio.reference.ssl__stream ssl::stream<>] template with asynchronous
+operations.
+
+* [@boost_asio/example/ssl/client.cpp]
+* [@boost_asio/example/ssl/server.cpp]
+
+
+[heading Timeouts]
+
+A collection of examples showing how to cancel long running asynchronous
+operations after a period of time.
+
+* [@boost_asio/example/timeouts/accept_timeout.cpp]
+* [@boost_asio/example/timeouts/connect_timeout.cpp]
+* [@boost_asio/example/timeouts/datagram_receive_timeout.cpp]
+* [@boost_asio/example/timeouts/stream_receive_timeout.cpp]
+
+
+[heading Timers]
+
+Examples showing how to customise deadline_timer using different time types.
+
+* [@boost_asio/example/timers/tick_count_timer.cpp]
+* [@boost_asio/example/timers/time_t_timer.cpp]
+
+
+[heading Porthopper]
+
+Example illustrating mixed synchronous and asynchronous operations, and how to
+use Boost.Lambda with Boost.Asio.
+
+* [@boost_asio/example/porthopper/protocol.hpp]
+* [@boost_asio/example/porthopper/client.cpp]
+* [@boost_asio/example/porthopper/server.cpp]
+
+
+[heading Nonblocking]
+
+Example demonstrating reactor-style operations for integrating a third-party
+library that wants to perform the I/O operations itself.
+
+* [@boost_asio/example/nonblocking/third_party_lib.cpp]
+
+
+[heading UNIX Domain Sockets]
+
+Examples showing how to use UNIX domain (local) sockets.
+
+* [@boost_asio/example/local/connect_pair.cpp]
+* [@boost_asio/example/local/stream_server.cpp]
+* [@boost_asio/example/local/stream_client.cpp]
+
+
+[heading Windows]
+
+An example showing how to use the Windows-specific function `TransmitFile`
+with Boost.Asio.
+
+* [@boost_asio/example/windows/transmit_file.cpp]
+
+
+[endsect]
=======================================
--- /dev/null
+++ /trunk/libs/asio/doc/history.qbk    Sun Feb  7 18:57:55 2010
@@ -0,0 +1,173 @@
+[/
+ / Copyright (c) 2003-2010 Christopher M. Kohlhoff (chris at kohlhoff dot com)
+ /
+ / 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)
+ /]
+
+[section:history Revision History]
+
+[heading Asio 1.4.4 / Boost 1.42]
+
+* Added a new HTTP Server 4 example illustrating the use of stackless coroutines
+  with Asio.
+* Changed handler allocation and invocation to use `boost::addressof` to get the
+  address of handler objects, rather than applying `operator&` directly
+  ([@https://svn.boost.org/trac/boost/ticket/2977 #2977]).
+* Restricted MSVC buffer debugging workaround to 2008, as it causes a crash with
+  2010 beta 2 ([@https://svn.boost.org/trac/boost/ticket/3796 #3796],
+  [@https://svn.boost.org/trac/boost/ticket/3822 #3822]).
+* Fixed a problem with the lifetime of handler memory, where Windows needs the + `OVERLAPPED` structure to be valid until both the initiating function call
+  has returned and the completion packet has been delivered.
+* Don't block signals while performing system calls, but instead restart the
+  calls if they are interrupted.
+* Documented the guarantee made by strand objects with respect to order of
+  handler invocation.
+* Changed strands to use a pool of implementations, to make copying of strands
+  cheaper.
+* Ensured that kqueue support is enabled for BSD platforms
+  ([@https://svn.boost.org/trac/boost/ticket/3626 #3626]).
+* Added a `boost_` prefix to the `extern "C"` thread entry point function
+  ([@https://svn.boost.org/trac/boost/ticket/3809 #3809]).
+* In `getaddrinfo` emulation, only check the socket type (`SOCK_STREAM` or
+  `SOCK_DGRAM`) if a service name has been specified. This should allow the
+  emulation to work with raw sockets.
+* Added a workaround for some broken Windows firewalls that make a socket
+  appear bound to 0.0.0.0 when it is in fact bound to 127.0.0.1.
+* Applied a fix for reported excessive CPU usage under Solaris
+  ([@https://svn.boost.org/trac/boost/ticket/3670 #3670]).
+* Added some support for platforms that use older compilers such as g++ 2.95
+  ([@https://svn.boost.org/trac/boost/ticket/3743 #3743]).
+
+[heading Asio 1.4.3 / Boost 1.40]
+
+* Added a new ping example to illustrate the use of ICMP sockets.
+* Changed the `buffered*_stream<>` templates to treat 0-byte reads and writes as + no-ops, to comply with the documented type requirements for `SyncReadStream`,
+  `AsyncReadStream`, `SyncWriteStream` and `AsyncWriteStream`.
+* Changed some instances of the `throw` keyword to `boost::throw_exception()` to + allow Asio to be used when exception support is disabled. Note that the SSL
+  wrappers still require exception support
+  ([@https://svn.boost.org/trac/boost/ticket/2754 #2754]).
+* Made Asio compatible with the OpenSSL 1.0 beta
+  ([@https://svn.boost.org/trac/boost/ticket/3256 #3256]).
+* Eliminated a redundant system call in the Solaris [^/dev/poll] backend.
+* Fixed a bug in resizing of the bucket array in the internal hash maps
+  ([@https://svn.boost.org/trac/boost/ticket/3095 #3095]).
+* Ensured correct propagation of the error code when a synchronous accept fails
+  ([@https://svn.boost.org/trac/boost/ticket/3216 #3216]).
+* Ensured correct propagation of the error code when a synchronous read or
+  write on a Windows HANDLE fails.
+* Fixed failures reported when `_GLIBCXX_DEBUG` is defined
+  ([@https://svn.boost.org/trac/boost/ticket/3098 #3098]).
+* Fixed custom memory allocation support for timers
+  ([@https://svn.boost.org/trac/boost/ticket/3107 #3107]).
+* Tidied up various warnings reported by g++
+  ([@https://svn.boost.org/trac/boost/ticket/1341 #1341],
+  [@https://svn.boost.org/trac/boost/ticket/2618 #2618]).
+* Various documentation improvements, including more obvious hyperlinks to
+ function overloads, header file information, examples for the handler type
+  requirements, and adding enum values to the index
+  ([@https://svn.boost.org/trac/boost/ticket/3157 #3157],
+  [@https://svn.boost.org/trac/boost/ticket/2620 #2620]).
+
+[heading Asio 1.4.2 / Boost 1.39]
+
+* Implement automatic resizing of the bucket array in the internal hash maps.
+  This is to improve performance for very large numbers of asynchronous
+  operations and also to reduce memory usage for very small numbers. A new
+ macro `BOOST_ASIO_HASH_MAP_BUCKETS` may be used to tweak the sizes used for
+  the bucket arrays. (N.B. this feature introduced a bug which was fixed in
+  Asio 1.4.3 / Boost 1.40.)
+* Add performance optimisation for the Windows IOCP backend for when no timers
+  are used.
+* Prevent locale settings from affecting formatting of TCP and UDP endpoints
+  ([@https://svn.boost.org/trac/boost/ticket/2682 #2682]).
+* Fix a memory leak that occurred when an asynchronous SSL operation's
+  completion handler threw an exception
+  ([@https://svn.boost.org/trac/boost/ticket/2910 #2910]).
+* Fix the implementation of `io_control()` so that it adheres to the
+  documented type requirements for IoControlCommand
+  ([@https://svn.boost.org/trac/boost/ticket/2820 #2820]).
+* Fix incompatibility between Asio and ncurses.h
+  ([@https://svn.boost.org/trac/boost/ticket/2156 #2156]).
+* On Windows, specifically handle the case when an overlapped `ReadFile` call
+  fails with `ERROR_MORE_DATA`. This enables a hack where a
+  `windows::stream_handle` can be used with a message-oriented named pipe
+  ([@https://svn.boost.org/trac/boost/ticket/2936 #2936]).
+* Fix system call wrappers to always clear the error on success, as POSIX
+  allows successful system calls to modify errno
+  ([@https://svn.boost.org/trac/boost/ticket/2953 #2953]).
+* Don't include termios.h if `BOOST_ASIO_DISABLE_SERIAL_PORT` is defined
+  ([@https://svn.boost.org/trac/boost/ticket/2917 #2917]).
+* Cleaned up some more MSVC level 4 warnings
+  ([@https://svn.boost.org/trac/boost/ticket/2828 #2828]).
+* Various documentation fixes
+  ([@https://svn.boost.org/trac/boost/ticket/2871 #2871]).
+
+[heading Asio 1.4.1 / Boost 1.38]
+
+* Improved compatibility with some Windows firewall software.
+* Ensured arguments to `windows::overlapped_ptr::complete()` are correctly
+  passed to the completion handler
+  ([@https://svn.boost.org/trac/boost/ticket/2614 #2614]).
+* Fixed a link problem and multicast failure on QNX
+  ([@https://svn.boost.org/trac/boost/ticket/2504 #2504],
+  [@https://svn.boost.org/trac/boost/ticket/2530 #2530]).
+* Fixed a compile error in SSL support on MinGW / g++ 3.4.5.
+* Drop back to using a pipe for notification if eventfd is not available at
+  runtime on Linux ([@https://svn.boost.org/trac/boost/ticket/2683 #2683]).
+* Various minor bug and documentation fixes
+  ([@https://svn.boost.org/trac/boost/ticket/2534 #2534],
+  [@https://svn.boost.org/trac/boost/ticket/2541 #2541],
+  [@https://svn.boost.org/trac/boost/ticket/2607 #2607],
+  [@https://svn.boost.org/trac/boost/ticket/2617 #2617],
+  [@https://svn.boost.org/trac/boost/ticket/2619 #2619]).
+
+[heading Asio 1.4.0 / Boost 1.37]
+
+* Enhanced CompletionCondition concept with the signature
+ `size_t CompletionCondition(error_code ec, size_t total)`, where the return
+  value indicates the maximum number of bytes to be transferred on the next
+  read or write operation. (The old CompletionCondition signature is still
+  supported for backwards compatibility).
+* New windows::overlapped_ptr class to allow arbitrary overlapped I/O
+  functions (such as TransmitFile) to be used with Asio.
+* On recent versions of Linux, an eventfd descriptor is now used (rather than
+  a pipe) to interrupt a blocked select/epoll reactor.
+* Added const overloads of lowest_layer().
+* Synchronous read, write, accept and connect operations are now thread safe
+  (meaning that it is now permitted to perform concurrent synchronous
+  operations on an individual socket, if supported by the OS).
+* Reactor-based io_service implementations now use lazy initialisation to
+  reduce the memory usage of an io_service object used only as a message
+  queue.
+
+[heading Asio 1.2.0 / Boost 1.36]
+
+* Added support for serial ports.
+* Added support for UNIX domain sockets.
+* Added support for raw sockets and ICMP.
+* Added wrappers for POSIX stream-oriented file descriptors (excluding regular
+  files).
+* Added wrappers for Windows stream-oriented `HANDLE`s such as named pipes
+  (requires `HANDLE`s that work with I/O completion ports).
+* Added wrappers for Windows random-access `HANDLE`s such as files (requires
+  `HANDLE`s that work with I/O completion ports).
+* Added support for reactor-style operations (i.e. they report readiness but
+  perform no I/O) using a new `null_buffers` type.
+* Added an iterator type for bytewise traversal of buffer sequences.
+* Added new `read_until()` and `async_read_until()` overloads that take a
+  user-defined function object for locating message boundaries.
+* Added an experimental two-lock queue (enabled by defining
+  `BOOST_ASIO_ENABLE_TWO_LOCK_QUEUE`) that may provide better `io_service`
+  scalability across many processors.
+* Various fixes, performance improvements, and more complete coverage of the
+  custom memory allocation support.
+
+[heading Asio 1.0.0 / Boost 1.35]
+
+First release of Asio as part of Boost.
+
+[endsect]
=======================================
--- /dev/null
+++ /trunk/libs/asio/doc/noncopyable_dox.txt    Sun Feb  7 18:57:55 2010
@@ -0,0 +1,10 @@
+//
+// Copyright (c) 2003-2010 Christopher M. Kohlhoff (chris at kohlhoff dot com)
+//
+// 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)
+//
+
+/**
+\class noncopyable
+*/
=======================================
--- /dev/null
+++ /trunk/libs/asio/doc/overview/allocation.qbk        Sun Feb  7 18:57:55 2010
@@ -0,0 +1,67 @@
+[/
+ / Copyright (c) 2003-2010 Christopher M. Kohlhoff (chris at kohlhoff dot com)
+ /
+ / 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)
+ /]
+
+[section:allocation Custom Memory Allocation]
+
+Many asynchronous operations need to allocate an object to store state
+associated with the operation. For example, a Win32 implementation needs
+`OVERLAPPED`-derived objects to pass to Win32 API functions.
+
+Furthermore, programs typically contain easily identifiable chains of
+asynchronous operations. A half duplex protocol implementation (e.g. an HTTP +server) would have a single chain of operations per client (receives followed
+by sends). A full duplex protocol implementation would have two chains
+executing in parallel. Programs should be able to leverage this knowledge to
+reuse memory for all asynchronous operations in a chain.
+
+Given a copy of a user-defined `Handler` object `h`, if the implementation
+needs to allocate memory associated with that handler it will execute the code:
+
+  void* pointer = asio_handler_allocate(size, &h);
+
+Similarly, to deallocate the memory it will execute:
+
+  asio_handler_deallocate(pointer, size, &h);
+
+These functions are located using argument-dependent lookup. The implementation +provides default implementations of the above functions in the `asio` namespace:
+
+  void* asio_handler_allocate(size_t, ...);
+  void asio_handler_deallocate(void*, size_t, ...);
+
+which are implemented in terms of `::operator new()` and `::operator delete()`
+respectively.
+
+The implementation guarantees that the deallocation will occur before the
+associated handler is invoked, which means the memory is ready to be reused for
+any new asynchronous operations started by the handler.
+
+The custom memory allocation functions may be called from any user-created
+thread that is calling a library function. The implementation guarantees that, +for the asynchronous operations included the library, the implementation will +not make concurrent calls to the memory allocation functions for that handler. +The implementation will insert appropriate memory barriers to ensure correct +memory visibility should allocation functions need to be called from different
+threads.
+
+Custom memory allocation support is currently implemented for all asynchronous
+operations with the following exceptions:
+
+* `ip::basic_resolver::async_resolve()` on all platforms.
+
+* `basic_socket::async_connect()` on Windows.
+
+* Any operation involving `null_buffers()` on Windows, other than an
+  asynchronous read performed on a stream-oriented socket.
+
+[heading See Also]
+
+[link boost_asio.reference.asio_handler_allocate asio_handler_allocate],
+[link boost_asio.reference.asio_handler_deallocate asio_handler_deallocate],
+[link boost_asio.examples.allocation custom memory allocation example].
+
+[endsect]
=======================================
--- /dev/null
+++ /trunk/libs/asio/doc/overview/async.qbk     Sun Feb  7 18:57:55 2010
@@ -0,0 +1,185 @@
+[/
+ / Copyright (c) 2003-2010 Christopher M. Kohlhoff (chris at kohlhoff dot com)
+ /
+ / 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)
+ /]
+
+[section:async The Proactor Design Pattern: Concurrency Without Threads]
+
+The Boost.Asio library offers side-by-side support for synchronous and asynchronous +operations. The asynchronous support is based on the Proactor design pattern +[link boost_asio.overview.core.async.references \[POSA2\]]. The advantages and +disadvantages of this approach, when compared to a synchronous-only or Reactor
+approach, are outlined below.
+
+[heading Proactor and Boost.Asio]
+
+Let us examine how the Proactor design pattern is implemented in Boost.Asio,
+without reference to platform-specific details.
+
+[$boost_asio/proactor.png]
+
+[*Proactor design pattern (adapted from \[POSA2\])]
+
+[mdash] Asynchronous Operation
+
+[:Defines an operation that is executed asynchronously, such as an asynchronous
+read or write on a socket.]
+
+[mdash] Asynchronous Operation Processor
+
+[:Executes asynchronous operations and queues events on a completion event
+queue when operations complete. From a high-level point of view, services like
+`stream_socket_service` are asynchronous operation processors.]
+
+[mdash] Completion Event Queue
+
+[:Buffers completion events until they are dequeued by an asynchronous event
+demultiplexer.]
+
+[mdash] Completion Handler
+
+[:Processes the result of an asynchronous operation. These are function
+objects, often created using `boost::bind`.]
+
+[mdash] Asynchronous Event Demultiplexer
+
+[:Blocks waiting for events to occur on the completion event queue, and returns
+a completed event to its caller.]
+
+[mdash] Proactor
+
+[:Calls the asynchronous event demultiplexer to dequeue events, and dispatches +the completion handler (i.e. invokes the function object) associated with the
+event. This abstraction is represented by the `io_service` class.]
+
+[mdash] Initiator
+
+[:Application-specific code that starts asynchronous operations. The initiator +interacts with an asynchronous operation processor via a high-level interface
+such as `basic_stream_socket`, which in turn delegates to a service like
+`stream_socket_service`.]
+
+[heading Implementation Using Reactor]
+
+On many platforms, Boost.Asio implements the Proactor design pattern in terms
+of a Reactor, such as `select`, `epoll` or `kqueue`. This implementation
+approach corresponds to the Proactor design pattern as follows:
+
+[mdash] Asynchronous Operation Processor
+
+[:A reactor implemented using `select`, `epoll` or `kqueue`. When the reactor +indicates that the resource is ready to perform the operation, the processor
+executes the asynchronous operation and enqueues the associated completion
+handler on the completion event queue.]
+
+[mdash] Completion Event Queue
+
+[:A linked list of completion handlers (i.e. function objects).]
+
+[mdash] Asynchronous Event Demultiplexer
+
+[:This is implemented by waiting on an event or condition variable until a
+completion handler is available in the completion event queue.]
+
+[heading Implementation Using Windows Overlapped I/O]
+
+On Windows NT, 2000 and XP, Boost.Asio takes advantage of overlapped I/O to
+provide an efficient implementation of the Proactor design pattern. This
+implementation approach corresponds to the Proactor design pattern as follows:
+
+[mdash] Asynchronous Operation Processor
+
+[:This is implemented by the operating system. Operations are initiated by
+calling an overlapped function such as `AcceptEx`.]
+
+[mdash] Completion Event Queue
+
+[:This is implemented by the operating system, and is associated with an I/O
+completion port. There is one I/O completion port for each `io_service`
+instance.]
+
+[mdash] Asynchronous Event Demultiplexer
+
+[:Called by Boost.Asio to dequeue events and their associated completion
+handlers.]
+
+[heading Advantages]
+
+[mdash] Portability.
+
+[:Many operating systems offer a native asynchronous I/O API (such as
+overlapped I/O on __Windows__) as the preferred option for developing high
+performance network applications. The library may be implemented in terms of
+native asynchronous I/O. However, if native support is not available, the
+library may also be implemented using synchronous event demultiplexors that
+typify the Reactor pattern, such as __POSIX__ `select()`.]
+
+[mdash] Decoupling threading from concurrency.
+
+[:Long-duration operations are performed asynchronously by the implementation +on behalf of the application. Consequently applications do not need to spawn
+many threads in order to increase concurrency.]
+
+[mdash] Performance and scalability.
+
+[:Implementation strategies such as thread-per-connection (which a
+synchronous-only approach would require) can degrade system performance, due to +increased context switching, synchronisation and data movement among CPUs. With +asynchronous operations it is possible to avoid the cost of context switching
+by minimising the number of operating system threads [mdash] typically a
+limited resource [mdash] and only activating the logical threads of control
+that have events to process.]
+
+[mdash] Simplified application synchronisation.
+
+[:Asynchronous operation completion handlers can be written as though they
+exist in a single-threaded environment, and so application logic can be
+developed with little or no concern for synchronisation issues.]
+
+[mdash] Function composition.
+
+[:Function composition refers to the implementation of functions to provide a +higher-level operation, such as sending a message in a particular format. Each +function is implemented in terms of multiple calls to lower-level read or write
+operations.]
+
+[:For example, consider a protocol where each message consists of a
+fixed-length header followed by a variable length body, where the length of the +body is specified in the header. A hypothetical read_message operation could be +implemented using two lower-level reads, the first to receive the header and,
+once the length is known, the second to receive the body.]
+
+[:To compose functions in an asynchronous model, asynchronous operations can be +chained together. That is, a completion handler for one operation can initiate +the next. Starting the first call in the chain can be encapsulated so that the +caller need not be aware that the higher-level operation is implemented as a
+chain of asynchronous operations.]
+
+[:The ability to compose new operations in this way simplifies the development +of higher levels of abstraction above a networking library, such as functions
+to support a specific protocol.]
+
+[heading Disadvantages]
+
+[mdash] Program complexity.
+
+[:It is more difficult to develop applications using asynchronous mechanisms
+due to the separation in time and space between operation initiation and
+completion. Applications may also be harder to debug due to the inverted flow
+of control.]
+
+[mdash] Memory usage.
+
+[:Buffer space must be committed for the duration of a read or write operation,
+which may continue indefinitely, and a separate buffer is required for each
+concurrent operation. The Reactor pattern, on the other hand, does not require
+buffer space until a socket is ready for reading or writing.]
+
+[heading References]
+
+\[POSA2\] D. Schmidt et al, ['Pattern Oriented Software Architecture, Volume
+2]. Wiley, 2000.
+
+[endsect]
=======================================
--- /dev/null
+++ /trunk/libs/asio/doc/overview/async_op1.dot Sun Feb  7 18:57:55 2010
@@ -0,0 +1,78 @@
+digraph g
+{
+  graph
+    [
+      nodesep="0.2"
+    ];
+
+  edge
+    [
+      fontname="Helvetica",
+      fontsize=10,
+      labelfontname="Helvetica",
+      labelfontsize=10
+    ];
+
+  node
+    [
+      fontname="Helvetica",
+      fontsize=10,
+      shape=box
+    ];
+
+  edge
+    [
+      arrowhead="open"
+    ]
+
+  // Program elements.
+  {
+    operating_system [ label="Operating System", shape=ellipse ];
+    io_service [ label="io_service" ];
+    io_object [ label="I/O Object\ne.g. socket" ];
+    your_program [ label="Your Program" ];
+    your_completion_handler [ label="Your Completion Handler" ];
+  }
+
+  // Owning relationships.
+  {
+    edge [ arrowtail="diamond" ];
+    your_program:e -> your_completion_handler:n;
+    your_program:w -> io_object:nw;
+    your_program:se -> io_service:ne;
+  }
+
+  // Non-owning relationships;
+  {
+    io_object:sw -> io_service:w;
+  }
+
+  // Visible actions.
+  {
+    edge [ style="dashed", color="#808080" ];
+
+    // Forward actions.
+    {
+      your_program:sw -> io_object:n [ label="1" ];
+      io_object:s -> io_service:nw [ label="2" ];
+      io_service:s -> operating_system:n [ label="3" ];
+    }
+  }
+
+  // Invisible actions.
+  {
+    edge [ style="invis" ];
+
+    // Forward actions.
+    {
+      your_program:s -> io_service:n [ label="5" ];
+    }
+
+    // Reverse actions.
+    {
+      edge [ arrowhead="none", arrowtail="open" ];
+      //io_service:s -> operating_system:n [ label="4" ];
+      your_completion_handler:s -> io_service:e [ label="6" ];
+    }
+  }
+}
=======================================
--- /dev/null
+++ /trunk/libs/asio/doc/overview/async_op2.dot Sun Feb  7 18:57:55 2010
@@ -0,0 +1,78 @@
+digraph g
+{
+  graph
+    [
+      nodesep="0.2"
+    ];
+
+  edge
+    [
+      fontname="Helvetica",
+      fontsize=10,
+      labelfontname="Helvetica",
+      labelfontsize=10
+    ];
+
+  node
+    [
+      fontname="Helvetica",
+      fontsize=10,
+      shape=box
+    ];
+
+  edge
+    [
+      arrowhead="open"
+    ]
+
+  // Program elements.
+  {
+    operating_system [ label="Operating System", shape=ellipse ];
+    io_service [ label="io_service" ];
+    io_object [ label="I/O Object\ne.g. socket" ];
+    your_program [ label="Your Program" ];
+    your_completion_handler [ label="Your Completion Handler" ];
+  }
+
+  // Owning relationships.
+  {
+    edge [ arrowtail="diamond" ];
+    your_program:e -> your_completion_handler:n;
+    your_program:w -> io_object:nw;
+    your_program:se -> io_service:ne;
+  }
+
+  // Non-owning relationships;
+  {
+    io_object:sw -> io_service:w;
+  }
+
+  // Visible actions.
+  {
+    edge [ style="dashed", color="#808080" ];
+
+    // Forward actions.
+    {
+      your_program:s -> io_service:n [ label="5" ];
+    }
+
+    // Reverse actions.
+    {
+      edge [ arrowhead="none", arrowtail="open" ];
+      io_service:s -> operating_system:n [ label="4" ];
+      your_completion_handler:s -> io_service:e [ label="6" ];
+    }
+  }
+
+  // Invisible actions.
+  {
+    edge [ style="invis" ];
+
+    // Forward actions.
+    {
+      your_program:sw -> io_object:n [ label="1" ];
+      io_object:s -> io_service:nw [ label="2" ];
+      //io_service:s -> operating_system:n [ label="3" ];
+    }
+  }
+}
=======================================
--- /dev/null
+++ /trunk/libs/asio/doc/overview/basics.qbk    Sun Feb  7 18:57:55 2010
@@ -0,0 +1,106 @@
+[/
+ / Copyright (c) 2003-2010 Christopher M. Kohlhoff (chris at kohlhoff dot com)
+ /
+ / 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)
+ /]
+
+[section:basics Basic Boost.Asio Anatomy]
+
+Boost.Asio may be used to perform both synchronous and asynchronous operations on I/O +objects such as sockets. Before using Boost.Asio it may be useful to get a conceptual +picture of the various parts of Boost.Asio, your program, and how they work together.
+
+As an introductory example, let's consider what happens when you perform a
+connect operation on a socket. We shall start by examining synchronous
+operations.
+
+[$boost_asio/sync_op.png]
+
+[*Your program] will have at least one [*io_service] object. The [*io_service] +represents [*your program]'s link to the [*operating system]'s I/O services.
+
+  boost::asio::io_service io_service;
+
+To perform I/O operations [*your program] will need an [*I/O object] such as a
+TCP socket:
+
+  boost::asio::ip::tcp::socket socket(io_service);
+
+When a synchronous connect operation is performed, the following sequence of
+events occurs:
+
+1. [*Your program] initiates the connect operation by calling the [*I/O
+object]:
+
+  socket.connect(server_endpoint);
+
+2. The [*I/O object] forwards the request to the [*io_service].
+
+3. The [*io_service] calls on the [*operating system] to perform the connect
+operation.
+
+4. The [*operating system] returns the result of the operation to the
+[*io_service].
+
+5. The [*io_service] translates any error resulting from the operation into a
+`boost::system::error_code`. An `error_code` may be compared with specific
+values, or tested as a boolean (where a `false` result means that no error
+occurred). The result is then forwarded back up to the [*I/O object].
+
+6. The [*I/O object] throws an exception of type `boost::system::system_error` +if the operation failed. If the code to initiate the operation had instead been
+written as:
+
+  boost::system::error_code ec;
+  socket.connect(server_endpoint, ec);
+
+then the `error_code` variable `ec` would be set to the result of the
+operation, and no exception would be thrown.
+
+When an asynchronous operation is used, a different sequence of events occurs.
+
+[$boost_asio/async_op1.png]
+
+1. [*Your program] initiates the connect operation by calling the [*I/O
+object]:
+
+  socket.async_connect(server_endpoint, your_completion_handler);
+
+where `your_completion_handler` is a function or function object with the
+signature:
+
+  void your_completion_handler(const boost::system::error_code& ec);
+
+The exact signature required depends on the asynchronous operation being
+performed. The reference documentation indicates the appropriate form for each
+operation.
+
+2. The [*I/O object] forwards the request to the [*io_service].
+
+3. The [*io_service] signals to the [*operating system] that it should start an
+asynchronous connect.
+
+Time passes. (In the synchronous case this wait would have been contained
+entirely within the duration of the connect operation.)
+
+[$boost_asio/async_op2.png]
+
+4. The [*operating system] indicates that the connect operation has completed +by placing the result on a queue, ready to be picked up by the [*io_service].
+
+5. [*Your program] must make a call to `io_service::run()` (or to one of the
+similar [*io_service] member functions) in order for the result to be
+retrieved. A call to `io_service::run()` blocks while there are unfinished
+asynchronous operations, so you would typically call it as soon as you have
+started your first asynchronous operation.
+
+6. While inside the call to `io_service::run()`, the [*io_service] dequeues the +result of the operation, translates it into an `error_code`, and then passes it
+to [*your completion handler].
+
+This is a simplified picture of how Boost.Asio operates. You will want to delve
+further into the documentation if your needs are more advanced, such as
+extending Boost.Asio to perform other types of asynchronous operations.
+
+[endsect]
=======================================
--- /dev/null
+++ /trunk/libs/asio/doc/overview/bsd_sockets.qbk       Sun Feb  7 18:57:55 2010
@@ -0,0 +1,270 @@
+[/
+ / Copyright (c) 2003-2010 Christopher M. Kohlhoff (chris at kohlhoff dot com)
+ /
+ / 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)
+ /]
+
+[section:bsd_sockets The BSD Socket API and Boost.Asio]
+
+The Boost.Asio library includes a low-level socket interface based on the BSD socket +API, which is widely implemented and supported by extensive literature. It is +also used as the basis for networking APIs in other languages, like Java. This
+low-level interface is designed to support the development of efficient and
+scalable applications. For example, it permits programmers to exert finer
+control over the number of system calls, avoid redundant data copying, minimise
+the use of resources like threads, and so on.
+
+Unsafe and error prone aspects of the BSD socket API not included. For example,
+the use of `int` to represent all sockets lacks type safety. The socket
+representation in Boost.Asio uses a distinct type for each protocol, e.g. for TCP one
+would use `ip::tcp::socket`, and for UDP one uses `ip::udp::socket`.
+
+The following table shows the mapping between the BSD socket API and Boost.Asio:
+
+[table
+  [
+    [BSD Socket API Elements]
+    [Equivalents in Boost.Asio]
+  ]
+  [
+    [socket descriptor - `int` (POSIX) or `SOCKET` (Windows)]
+    [ For TCP: [link boost_asio.reference.ip__tcp.socket ip::tcp::socket],
+ [link boost_asio.reference.ip__tcp.acceptor ip::tcp::acceptor]
+
+      For UDP: [link boost_asio.reference.ip__udp.socket ip::udp::socket]
+
+               [link boost_asio.reference.basic_socket basic_socket],
+ [link boost_asio.reference.basic_stream_socket basic_stream_socket], + [link boost_asio.reference.basic_datagram_socket basic_datagram_socket], + [link boost_asio.reference.basic_raw_socket basic_raw_socket] ]
+  ]
+  [
+    [`in_addr`,
+     `in6_addr`]
+    [          [link boost_asio.reference.ip__address ip::address],
+               [link boost_asio.reference.ip__address ip::address_v4],
+               [link boost_asio.reference.ip__address ip::address_v6] ]
+  ]
+  [
+    [`sockaddr_in`,
+     `sockaddr_in6`]
+ [ For TCP: [link boost_asio.reference.ip__tcp.endpoint ip::tcp::endpoint]
+
+ For UDP: [link boost_asio.reference.ip__udp.endpoint ip::udp::endpoint]
+
+ [link boost_asio.reference.ip__basic_endpoint ip::basic_endpoint] ]
+  ]
+  [
+    [`accept()`]
+ [ For TCP: [link boost_asio.reference.basic_socket_acceptor.accept ip::tcp::acceptor::accept()]
+
+ [link boost_asio.reference.basic_socket_acceptor.accept basic_socket_acceptor::accept()] ]
+  ]
+  [
+    [`bind()`]
+ [ For TCP: [link boost_asio.reference.basic_socket.bind ip::tcp::acceptor::bind()], + [link boost_asio.reference.basic_socket.bind ip::tcp::socket::bind()]
+
+ For UDP: [link boost_asio.reference.basic_socket.bind ip::udp::socket::bind()]
+
+ [link boost_asio.reference.basic_socket.bind basic_socket::bind()] ]
+  ]
+  [
+    [`close()`]
+ [ For TCP: [link boost_asio.reference.basic_socket.close ip::tcp::acceptor::close()], + [link boost_asio.reference.basic_socket.close ip::tcp::socket::close()]
+
+ For UDP: [link boost_asio.reference.basic_socket.close ip::udp::socket::close()]
+
+ [link boost_asio.reference.basic_socket.close basic_socket::close()] ]
+  ]
+  [
+    [`connect()`]
+ [ For TCP: [link boost_asio.reference.basic_socket.connect ip::tcp::socket::connect()]
+
+ For UDP: [link boost_asio.reference.basic_socket.connect ip::udp::socket::connect()]
+
+ [link boost_asio.reference.basic_socket.connect basic_socket::connect()] ]
+  ]
+  [
+    [`getaddrinfo()`,
+     `gethostbyaddr()`,
+     `gethostbyname()`,
+     `getnameinfo()`,
+     `getservbyname()`,
+     `getservbyport()`]
+ [ For TCP: [link boost_asio.reference.ip__basic_resolver.resolve ip::tcp::resolver::resolve()], + [link boost_asio.reference.ip__basic_resolver.async_resolve ip::tcp::resolver::async_resolve()]
+
+ For UDP: [link boost_asio.reference.ip__basic_resolver.resolve ip::udp::resolver::resolve()], + [link boost_asio.reference.ip__basic_resolver.async_resolve ip::udp::resolver::async_resolve()]
+
+ [link boost_asio.reference.ip__basic_resolver.resolve ip::basic_resolver::resolve()], + [link boost_asio.reference.ip__basic_resolver.async_resolve ip::basic_resolver::async_resolve()] ]
+  ]
+  [
+    [`gethostname()`]
+    [          [link boost_asio.reference.ip__host_name ip::host_name()] ]
+  ]
+  [
+    [`getpeername()`]
+ [ For TCP: [link boost_asio.reference.basic_socket.remote_endpoint ip::tcp::socket::remote_endpoint()]
+
+ For UDP: [link boost_asio.reference.basic_socket.remote_endpoint ip::udp::socket::remote_endpoint()]
+
+ [link boost_asio.reference.basic_socket.remote_endpoint basic_socket::remote_endpoint()] ]
+  ]
+  [
+    [`getsockname()`]
+ [ For TCP: [link boost_asio.reference.basic_socket.local_endpoint ip::tcp::acceptor::local_endpoint()], + [link boost_asio.reference.basic_socket.local_endpoint ip::tcp::socket::local_endpoint()]
+
+ For UDP: [link boost_asio.reference.basic_socket.local_endpoint ip::udp::socket::local_endpoint()]
+
+ [link boost_asio.reference.basic_socket.local_endpoint basic_socket::local_endpoint()] ]
+  ]
+  [
+    [`getsockopt()`]
+ [ For TCP: [link boost_asio.reference.basic_socket.get_option ip::tcp::acceptor::get_option()], + [link boost_asio.reference.basic_socket.get_option ip::tcp::socket::get_option()]
+
+ For UDP: [link boost_asio.reference.basic_socket.get_option ip::udp::socket::get_option()]
+
+ [link boost_asio.reference.basic_socket.get_option basic_socket::get_option()] ]
+  ]
+  [
+    [`inet_addr()`,
+     `inet_aton()`,
+     `inet_pton()`]
+ [ [link boost_asio.reference.ip__address.from_string ip::address::from_string()], + [link boost_asio.reference.ip__address.from_string ip::address_v4::from_string()], + [link boost_asio.reference.ip__address.from_string ip_address_v6::from_string()] ]
+  ]
+  [
+    [`inet_ntoa()`,
+     `inet_ntop()`]
+ [ [link boost_asio.reference.ip__address.to_string ip::address::to_string()], + [link boost_asio.reference.ip__address.to_string ip::address_v4::to_string()], + [link boost_asio.reference.ip__address.to_string ip_address_v6::to_string()] ]
+  ]
+  [
+    [`ioctl()`]
+ [ For TCP: [link boost_asio.reference.basic_socket.io_control ip::tcp::socket::io_control()]
+
+ For UDP: [link boost_asio.reference.basic_socket.io_control ip::udp::socket::io_control()]
+
+ [link boost_asio.reference.basic_socket.io_control basic_socket::io_control()] ]
+  ]
+  [
+    [`listen()`]
+ [ For TCP: [link boost_asio.reference.basic_socket_acceptor.listen ip::tcp::acceptor::listen()]
+
+ [link boost_asio.reference.basic_socket_acceptor.listen basic_socket_acceptor::listen()] ]
+  ]
+  [
+    [`poll()`,
+     `select()`,
+     `pselect()`]
+ [ [link boost_asio.reference.io_service.run io_service::run()], + [link boost_asio.reference.io_service.run_one io_service::run_one()], + [link boost_asio.reference.io_service.poll io_service::poll()], + [link boost_asio.reference.io_service.poll_one io_service::poll_one()]
+
+      Note: in conjunction with asynchronous operations. ]
+  ]
+  [
+    [`readv()`,
+     `recv()`,
+     `read()`]
+ [ For TCP: [link boost_asio.reference.basic_stream_socket.read_some ip::tcp::socket::read_some()], + [link boost_asio.reference.basic_stream_socket.async_read_some ip::tcp::socket::async_read_some()], + [link boost_asio.reference.basic_stream_socket.receive ip::tcp::socket::receive()], + [link boost_asio.reference.basic_stream_socket.async_receive ip::tcp::socket::async_receive()]
+
+ For UDP: [link boost_asio.reference.basic_datagram_socket.receive ip::udp::socket::receive()], + [link boost_asio.reference.basic_datagram_socket.async_receive ip::udp::socket::async_receive()]
+
+ [link boost_asio.reference.basic_stream_socket.read_some basic_stream_socket::read_some()], + [link boost_asio.reference.basic_stream_socket.async_read_some basic_stream_socket::async_read_some()], + [link boost_asio.reference.basic_stream_socket.receive basic_stream_socket::receive()], + [link boost_asio.reference.basic_stream_socket.async_receive basic_stream_socket::async_receive()], + [link boost_asio.reference.basic_datagram_socket.receive basic_datagram_socket::receive()], + [link boost_asio.reference.basic_datagram_socket.async_receive basic_datagram_socket::async_receive()] ]
+  ]
+  [
+    [`recvfrom()`]
+ [ For UDP: [link boost_asio.reference.basic_datagram_socket.receive_from ip::udp::socket::receive_from()], + [link boost_asio.reference.basic_datagram_socket.async_receive_from ip::udp::socket::async_receive_from()]
+
+ [link boost_asio.reference.basic_datagram_socket.receive_from basic_datagram_socket::receive_from()], + [link boost_asio.reference.basic_datagram_socket.async_receive_from basic_datagram_socket::async_receive_from()] ]
+  ]
+  [
+    [`send()`,
+     `write()`,
+     `writev()`]
+ [ For TCP: [link boost_asio.reference.basic_stream_socket.write_some ip::tcp::socket::write_some()], + [link boost_asio.reference.basic_stream_socket.async_write_some ip::tcp::socket::async_write_some()], + [link boost_asio.reference.basic_stream_socket.send ip::tcp::socket::send()], + [link boost_asio.reference.basic_stream_socket.async_send ip::tcp::socket::async_send()]
+
+ For UDP: [link boost_asio.reference.basic_datagram_socket.send ip::udp::socket::send()], + [link boost_asio.reference.basic_datagram_socket.async_send ip::udp::socket::async_send()]
+
+ [link boost_asio.reference.basic_stream_socket.write_some basic_stream_socket::write_some()], + [link boost_asio.reference.basic_stream_socket.async_write_some basic_stream_socket::async_write_some()], + [link boost_asio.reference.basic_stream_socket.send basic_stream_socket::send()], + [link boost_asio.reference.basic_stream_socket.async_send basic_stream_socket::async_send()], + [link boost_asio.reference.basic_datagram_socket.send basic_datagram_socket::send()], + [link boost_asio.reference.basic_datagram_socket.async_send basic_datagram_socket::async_send()] ]
+  ]
+  [
+    [`sendto()`]
+ [ For UDP: [link boost_asio.reference.basic_datagram_socket.send_to ip::udp::socket::send_to()], + [link boost_asio.reference.basic_datagram_socket.async_send_to ip::udp::socket::async_send_to()]
+
+ [link boost_asio.reference.basic_datagram_socket.send_to basic_datagram_socket::send_to()], + [link boost_asio.reference.basic_datagram_socket.async_send_to basic_datagram_socket::async_send_to()] ]
+  ]
+  [
+    [`setsockopt()`]
+ [ For TCP: [link boost_asio.reference.basic_socket.set_option ip::tcp::acceptor::set_option()], + [link boost_asio.reference.basic_socket.set_option ip::tcp::socket::set_option()]
+
+ For UDP: [link boost_asio.reference.basic_socket.set_option ip::udp::socket::set_option()]
+
+ [link boost_asio.reference.basic_socket.set_option basic_socket::set_option()] ]
+  ]
+  [
+    [`shutdown()`]
+ [ For TCP: [link boost_asio.reference.basic_socket.shutdown ip::tcp::socket::shutdown()]
+
+ For UDP: [link boost_asio.reference.basic_socket.shutdown ip::udp::socket::shutdown()]
+
+ [link boost_asio.reference.basic_socket.shutdown basic_socket::shutdown()] ]
+  ]
+  [
+    [`sockatmark()`]
+ [ For TCP: [link boost_asio.reference.basic_socket.at_mark ip::tcp::socket::at_mark()]
+
+ [link boost_asio.reference.basic_socket.at_mark basic_socket::at_mark()] ]
+  ]
+  [
+    [`socket()`]
+ [ For TCP: [link boost_asio.reference.basic_socket.open ip::tcp::acceptor::open()], + [link boost_asio.reference.basic_socket.open ip::tcp::socket::open()]
+
+ For UDP: [link boost_asio.reference.basic_socket.open ip::udp::socket::open()]
+
+ [link boost_asio.reference.basic_socket.open basic_socket::open()] ]
+  ]
+  [
+    [`socketpair()`]
+ [ [link boost_asio.reference.local__connect_pair local::connect_pair()]
+
+      Note: POSIX operating systems only. ]
+  ]
+]
+
+[endsect]
=======================================
--- /dev/null
+++ /trunk/libs/asio/doc/overview/buffers.qbk   Sun Feb  7 18:57:55 2010
@@ -0,0 +1,162 @@
+[/
+ / Copyright (c) 2003-2010 Christopher M. Kohlhoff (chris at kohlhoff dot com)
+ /
+ / 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)
+ /]
+
+[section:buffers Buffers]
+
+Fundamentally, I/O involves the transfer of data to and from contiguous regions
+of memory, called buffers. These buffers can be simply expressed as a tuple
+consisting of a pointer and a size in bytes. However, to allow the development +of efficient network applications, Boost.Asio includes support for scatter-gather
+operations. These operations involve one or more buffers:
+
+* A scatter-read receives data into multiple buffers.
+* A gather-write transmits multiple buffers.
+
+Therefore we require an abstraction to represent a collection of buffers. The
+approach used in Boost.Asio is to define a type (actually two types) to
+represent a single buffer. These can be stored in a container, which may be
+passed to the scatter-gather operations.
+
+In addition to specifying buffers as a pointer and size in bytes, Boost.Asio makes a
+distinction between modifiable memory (called mutable) and non-modifiable
+memory (where the latter is created from the storage for a const-qualified
+variable). These two types could therefore be defined as follows:
+
+  typedef std::pair<void*, std::size_t> mutable_buffer;
+  typedef std::pair<const void*, std::size_t> const_buffer;
+
+Here, a mutable_buffer would be convertible to a const_buffer, but conversion
+in the opposite direction is not valid.
+
+However, Boost.Asio does not use the above definitions as-is, but instead defines two +classes: `mutable_buffer` and `const_buffer`. The goal of these is to provide
+an opaque representation of contiguous memory, where:
+
+* Types behave as std::pair would in conversions. That is, a `mutable_buffer` is + convertible to a `const_buffer`, but the opposite conversion is disallowed.
+
+* There is protection against buffer overruns. Given a buffer instance, a user
+  can only create another buffer representing the same range of memory or a
+  sub-range of it. To provide further safety, the library also includes
+ mechanisms for automatically determining the size of a buffer from an array,
+  `boost::array` or `std::vector` of POD elements, or from a `std::string`.
+
+* Type safety violations must be explicitly requested using the `buffer_cast` + function. In general an application should never need to do this, but it is
+  required by the library implementation to pass the raw memory to the
+  underlying operating system functions.
+
+Finally, multiple buffers can be passed to scatter-gather operations (such as +[link boost_asio.reference.read read()] or [link boost_asio.reference.write write()]) by +putting the buffer objects into a container. The `MutableBufferSequence` and
+`ConstBufferSequence` concepts have been defined so that containers such as
+`std::vector`, `std::list`, `std::vector` or `boost::array` can be used.
+
+[heading Streambuf for Integration with Iostreams]
+
+The class `boost::asio::basic_streambuf` is derived from `std::basic_streambuf` to +associate the input sequence and output sequence with one or more objects of
+some character array type, whose elements store arbitrary values. These
+character array objects are internal to the streambuf object, but direct access
+to the array elements is provided to permit them to be used with I/O
+operations, such as the send or receive operations of a socket:
+
+* The input sequence of the streambuf is accessible via the [link
+ boost_asio.reference.basic_streambuf.data data()] member function. The return type
+  of this function meets the `ConstBufferSequence` requirements.
+
+* The output sequence of the streambuf is accessible via the [link
+ boost_asio.reference.basic_streambuf.data prepare()] member function. The return
+  type of this function meets the `MutableBufferSequence` requirements.
+
+* Data is transferred from the front of the output sequence to the back of the + input sequence by calling the [link boost_asio.reference.basic_streambuf.commit
+  commit()] member function.
+
+* Data is removed from the front of the input sequence by calling the [link
+  boost_asio.reference.basic_streambuf.consume consume()] member function.
+
+The streambuf constructor accepts a `size_t` argument specifying the maximum of +the sum of the sizes of the input sequence and output sequence. Any operation +that would, if successful, grow the internal data beyond this limit will throw
+a `std::length_error` exception.
+
+[heading Bytewise Traversal of Buffer Sequences]
+
+The `buffers_iterator<>` class template allows buffer sequences (i.e. types
+meeting `MutableBufferSequence` or `ConstBufferSequence` requirements) to be +traversed as though they were a contiguous sequence of bytes. Helper functions
+called buffers_begin() and buffers_end() are also provided, where the
+buffers_iterator<> template parameter is automatically deduced.
+
+As an example, to read a single line from a socket and into a `std::string`,
+you may write:
+
+  boost::asio::streambuf sb;
+  ...
+  std::size_t n = boost::asio::read_until(sock, sb, '\n');
+  boost::asio::streambuf::const_buffers_type bufs = sb.data();
+  std::string line(
+      boost::asio::buffers_begin(bufs),
+      boost::asio::buffers_begin(bufs) + n);
+
+[heading Buffer Debugging]
+
+Some standard library implementations, such as the one that ships with
+Microsoft Visual C++ 8.0 and later, provide a feature called iterator
+debugging. What this means is that the validity of iterators is checked at
+runtime. If a program tries to use an iterator that has been invalidated, an
+assertion will be triggered. For example:
+
+  std::vector<int> v(1)
+  std::vector<int>::iterator i = v.begin();
+  v.clear(); // invalidates iterators
+  *i = 0; // assertion!
+
+Boost.Asio takes advantage of this feature to add buffer debugging. Consider the
+following code:
+
+  void dont_do_this()
+  {
+   std::string msg = "Hello, world!";
+   boost::asio::async_write(sock, boost::asio::buffer(msg), my_handler);
+  }
+
+When you call an asynchronous read or write you need to ensure that the buffers
+for the operation are valid until the completion handler is called. In the
+above example, the buffer is the `std::string` variable `msg`. This variable is
+on the stack, and so it goes out of scope before the asynchronous operation
+completes. If you're lucky then the application will crash, but random failures
+are more likely.
+
+When buffer debugging is enabled, Boost.Asio stores an iterator into the string until
+the asynchronous operation completes, and then dereferences it to check its
+validity. In the above example you would observe an assertion failure just
+before Boost.Asio tries to call the completion handler.
+
+This feature is automatically made available for Microsoft Visual Studio 8.0 or +later and for GCC when `_GLIBCXX_DEBUG` is defined. There is a performance cost
+to this checking, so buffer debugging is only enabled in debug builds. For
+other compilers it may be enabled by defining `BOOST_ASIO_ENABLE_BUFFER_DEBUGGING`. +It can also be explicitly disabled by defining `BOOST_ASIO_DISABLE_BUFFER_DEBUGGING`.
+
+[heading See Also]
+
+[link boost_asio.reference.buffer buffer],
+[link boost_asio.reference.buffers_begin buffers_begin],
+[link boost_asio.reference.buffers_end buffers_end],
+[link boost_asio.reference.buffers_iterator buffers_iterator],
+[link boost_asio.reference.const_buffer const_buffer],
+[link boost_asio.reference.const_buffers_1 const_buffers_1],
+[link boost_asio.reference.mutable_buffer mutable_buffer],
+[link boost_asio.reference.mutable_buffers_1 mutable_buffers_1],
+[link boost_asio.reference.streambuf streambuf],
+[link boost_asio.reference.ConstBufferSequence ConstBufferSequence],
+[link boost_asio.reference.MutableBufferSequence MutableBufferSequence],
+[link boost_asio.examples.buffers buffers example].
+
+[endsect]
=======================================
--- /dev/null
+++ /trunk/libs/asio/doc/overview/implementation.qbk Sun Feb 7 18:57:55 2010
@@ -0,0 +1,259 @@
+[/
+ / Copyright (c) 2003-2010 Christopher M. Kohlhoff (chris at kohlhoff dot com)
+ /
+ / 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)
+ /]
+
+[section:implementation Platform-Specific Implementation Notes]
+
+This section lists platform-specific implementation details, such as the
+default demultiplexing mechanism, the number of threads created internally, and
+when threads are created.
+
+
+[heading Linux Kernel 2.4]
+
+Demultiplexing mechanism:
+
+* Uses `select` for demultiplexing. This means that the number of file
+descriptors in the process cannot be permitted to exceed `FD_SETSIZE`.
+
+Threads:
+
+* Demultiplexing using `select` is performed in one of the threads that calls
+`io_service::run()`, `io_service::run_one()`, `io_service::poll()` or
+`io_service::poll_one()`.
+
+* An additional thread per `io_service` is used to emulate asynchronous host
+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]
+
+Demultiplexing mechanism:
+
+* Uses `epoll` for demultiplexing.
+
+Threads:
+
+* Demultiplexing using `epoll` is performed in one of the threads that calls
+`io_service::run()`, `io_service::run_one()`, `io_service::poll()` or
+`io_service::poll_one()`.
+
+* An additional thread per `io_service` is used to emulate asynchronous host
+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]
+
+Demultiplexing mechanism:
+
+* Uses [^/dev/poll] for demultiplexing.
+
+Threads:
+
+* Demultiplexing using [^/dev/poll] is performed in one of the threads that
+calls `io_service::run()`, `io_service::run_one()`, `io_service::poll()` or
+`io_service::poll_one()`.
+
+* An additional thread per `io_service` is used to emulate asynchronous host
+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]
+
+Demultiplexing mechanism:
+
+* Uses `select` for demultiplexing. This means that the number of file
+descriptors in the process cannot be permitted to exceed `FD_SETSIZE`.
+
+Threads:
+
+* Demultiplexing using `select` is performed in one of the threads that calls
+`io_service::run()`, `io_service::run_one()`, `io_service::poll()` or
+`io_service::poll_one()`.
+
+* An additional thread per `io_service` is used to emulate asynchronous host
+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]
+
+Demultiplexing mechanism:
+
+* Uses `kqueue` for demultiplexing.
+
+Threads:
+
+* Demultiplexing using `kqueue` is performed in one of the threads that calls
+`io_service::run()`, `io_service::run_one()`, `io_service::poll()` or
+`io_service::poll_one()`.
+
+* An additional thread per `io_service` is used to emulate asynchronous host
+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]
+
+Demultiplexing mechanism:
+
+* Uses `kqueue` for demultiplexing.
+
+Threads:
+
+* Demultiplexing using `kqueue` is performed in one of the threads that calls
+`io_service::run()`, `io_service::run_one()`, `io_service::poll()` or
+`io_service::poll_one()`.
+
+* An additional thread per `io_service` is used to emulate asynchronous host
+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]
+
+Demultiplexing mechanism:
+
+* Uses `select` for demultiplexing. This means that the number of file
+descriptors in the process cannot be permitted to exceed `FD_SETSIZE`.
+
+Threads:
+
+* Demultiplexing using `select` is performed in one of the threads that calls
+`io_service::run()`, `io_service::run_one()`, `io_service::poll()` or
+`io_service::poll_one()`.
+
+* An additional thread per `io_service` is used to emulate asynchronous host
+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]
+
+Demultiplexing mechanism:
+
+* Uses `select` for demultiplexing. This means that the number of file
+descriptors in the process cannot be permitted to exceed `FD_SETSIZE`.
+
+Threads:
+
+* Demultiplexing using `select` is performed in one of the threads that calls
+`io_service::run()`, `io_service::run_one()`, `io_service::poll()` or
+`io_service::poll_one()`.
+
+* An additional thread per `io_service` is used to emulate asynchronous host
+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]
+
+Demultiplexing mechanism:
+
+* Uses `select` for demultiplexing. This means that the number of file
+descriptors in the process cannot be permitted to exceed `FD_SETSIZE`.
+
+Threads:
+
+* Demultiplexing using `select` is performed in one of the threads that calls
+`io_service::run()`, `io_service::run_one()`, `io_service::poll()` or
+`io_service::poll_one()`.
+
+* An additional thread per `io_service` is used to emulate asynchronous host
+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]
+
+Demultiplexing mechanism:
+
+* Uses `select` for demultiplexing.
+
+Threads:
+
+* Demultiplexing using `select` is performed in one of the threads that calls
+`io_service::run()`, `io_service::run_one()`, `io_service::poll()` or
+`io_service::poll_one()`.
+
+* An additional thread per `io_service` is used to emulate asynchronous host
+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]
+
+Demultiplexing mechanism:
+
+* Uses overlapped I/O and I/O completion ports for all asynchronous socket
+operations except for asynchronous connect.
+
+* Uses `select` for emulating asynchronous connect.
+
+Threads:
+
+* Demultiplexing using I/O completion ports is performed in all threads that call
+`io_service::run()`, `io_service::run_one()`, `io_service::poll()` or
+`io_service::poll_one()`.
+
+* An additional thread per `io_service` is used for the `select`
+demultiplexing. This thread is created on the first call to `async_connect()`.
+
+* An additional thread per `io_service` is used to emulate asynchronous host
+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]
=======================================
--- /dev/null
+++ /trunk/libs/asio/doc/overview/iostreams.qbk Sun Feb  7 18:57:55 2010
@@ -0,0 +1,46 @@
+[/
+ / Copyright (c) 2003-2010 Christopher M. Kohlhoff (chris at kohlhoff dot com)
+ /
+ / 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)
+ /]
+
+[section:iostreams Socket Iostreams]
+
+Boost.Asio includes classes that implement iostreams on top of sockets. These hide
+away the complexities associated with endpoint resolution, protocol
+independence, etc. To create a connection one might simply write:
+
+  ip::tcp::iostream stream("www.boost.org", "http");
+  if (!stream)
+  {
+    // Can't connect.
+  }
+
+The iostream class can also be used in conjunction with an acceptor to create
+simple servers. For example:
+
+  io_service ios;
+
+  ip::tcp::endpoint endpoint(tcp::v4(), 80);
+  ip::tcp::acceptor acceptor(ios, endpoint);
+
+  for (;;)
+  {
+    ip::tcp::iostream stream;
+    acceptor.accept(*stream.rdbuf());
+    ...
+  }
+
+[heading See Also]
+
+[link boost_asio.reference.ip__tcp.iostream ip::tcp::iostream],
+[link boost_asio.reference.basic_socket_iostream basic_socket_iostream],
+[link boost_asio.examples.iostreams iostreams examples].
+
+[heading Notes]
+
+These iostream templates only support `char`, not `wchar_t`, and do not perform
+any code conversion.
+
+[endsect]
=======================================
--- /dev/null
+++ /trunk/libs/asio/doc/overview/line_based.qbk        Sun Feb  7 18:57:55 2010
@@ -0,0 +1,118 @@
+[/
+ / Copyright (c) 2003-2010 Christopher M. Kohlhoff (chris at kohlhoff dot com)
+ /
+ / 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)
+ /]
+
+[section:line_based Line-Based Operations]
+
+Many commonly-used internet protocols are line-based, which means that they
+have protocol elements that are delimited by the character sequence `"\r\n"`. +Examples include HTTP, SMTP and FTP. To more easily permit the implementation +of line-based protocols, as well as other protocols that use delimiters, Boost.Asio
+includes the functions `read_until()` and `async_read_until()`.
+
+The following example illustrates the use of `async_read_until()` in an HTTP
+server, to receive the first line of an HTTP request from a client:
+
+  class http_connection
+  {
+    ...
+
+    void start()
+    {
+      boost::asio::async_read_until(socket_, data_, "\r\n",
+          boost::bind(&http_connection::handle_request_line, this, _1));
+    }
+
+    void handle_request_line(boost::system::error_code ec)
+    {
+      if (!ec)
+      {
+        std::string method, uri, version;
+        char sp1, sp2, cr, lf;
+        std::istream is(&data_);
+        is.unsetf(std::ios_base::skipws);
+        is >> method >> sp1 >> uri >> sp2 >> version >> cr >> lf;
+        ...
+      }
+    }
+
+    ...
+
+    boost::asio::ip::tcp::socket socket_;
+    boost::asio::streambuf data_;
+  };
+
+The `streambuf` data member serves as a place to store the data that has been +read from the socket before it is searched for the delimiter. It is important
+to remember that there may be additional data ['after] the delimiter. This
+surplus data should be left in the `streambuf` so that it may be inspected by a
+subsequent call to `read_until()` or `async_read_until()`.
+
+The delimiters may be specified as a single `char`, a `std::string` or a
+`boost::regex`. The `read_until()` and `async_read_until()` functions also
+include overloads that accept a user-defined function object called a match
+condition. For example, to read data into a streambuf until whitespace is
+encountered:
+
+  typedef boost::asio::buffers_iterator<
+      boost::asio::streambuf::const_buffers_type> iterator;
+
+  std::pair<iterator, bool>
+  match_whitespace(iterator begin, iterator end)
+  {
+    iterator i = begin;
+    while (i != end)
+      if (std::isspace(*i++))
+        return std::make_pair(i, true);
+    return std::make_pair(i, false);
+  }
+  ...
+  boost::asio::streambuf b;
+  boost::asio::read_until(s, b, match_whitespace);
+
+To read data into a streambuf until a matching character is found:
+
+  class match_char
+  {
+  public:
+    explicit match_char(char c) : c_(c) {}
+
+    template <typename Iterator>
+    std::pair<Iterator, bool> operator()(
+        Iterator begin, Iterator end) const
+    {
+      Iterator i = begin;
+      while (i != end)
+        if (c_ == *i++)
+          return std::make_pair(i, true);
+      return std::make_pair(i, false);
+    }
+
+  private:
+    char c_;
+  };
+
+  namespace boost { namespace asio {
+    template <> struct is_match_condition<match_char>
+      : public boost::true_type {};
+  } } // namespace boost::asio
+  ...
+  boost::asio::streambuf b;
+  boost::asio::read_until(s, b, match_char('a'));
+
+The `is_match_condition<>` type trait automatically evaluates to true for
+functions, and for function objects with a nested `result_type` typedef. For
+other types the trait must be explicitly specialised, as shown above.
+
+[heading See Also]
+
+[link boost_asio.reference.async_read_until async_read_until()],
+[link boost_asio.reference.is_match_condition is_match_condition],
+[link boost_asio.reference.read_until read_until()],
+[link boost_asio.reference.streambuf streambuf],
+[link boost_asio.examples.http_client HTTP client example].
+
+[endsect]
=======================================
--- /dev/null
+++ /trunk/libs/asio/doc/overview/posix.qbk     Sun Feb  7 18:57:55 2010
@@ -0,0 +1,106 @@
+[/
+ / Copyright (c) 2003-2010 Christopher M. Kohlhoff (chris at kohlhoff dot com)
+ /
+ / 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)
+ /]
+
+[section:posix POSIX-Specific Functionality]
+
+[link boost_asio.overview.posix.local UNIX Domain Sockets]
+
+[link boost_asio.overview.posix.stream_descriptor Stream-Oriented File Descriptors]
+
+[section:local UNIX Domain Sockets]
+
+Boost.Asio provides basic support UNIX domain sockets (also known as local sockets). +The simplest use involves creating a pair of connected sockets. The following
+code:
+
+  local::stream_protocol::socket socket1(my_io_service);
+  local::stream_protocol::socket socket2(my_io_service);
+  local::connect_pair(socket1, socket2);
+
+will create a pair of stream-oriented sockets. To do the same for
+datagram-oriented sockets, use:
+
+  local::datagram_protocol::socket socket1(my_io_service);
+  local::datagram_protocol::socket socket2(my_io_service);
+  local::connect_pair(socket1, socket2);
+
+A UNIX domain socket server may be created by binding an acceptor to an
+endpoint, in much the same way as one does for a TCP server:
+
+  ::unlink("/tmp/foobar"); // Remove previous binding.
+  local::stream_protocol::endpoint ep("/tmp/foobar");
+  local::stream_protocol::acceptor acceptor(my_io_service, ep);
+  local::stream_protocol::socket socket(my_io_service);
+  acceptor.accept(socket);
+
+A client that connects to this server might look like:
+
+  local::stream_protocol::endpoint ep("/tmp/foobar");
+  local::stream_protocol::socket socket(my_io_service);
+  socket.connect(ep);
+
+Transmission of file descriptors or credentials across UNIX domain sockets is +not directly supported within Boost.Asio, but may be achieved by accessing the
+socket's underlying descriptor using the [link
+boost_asio.reference.basic_socket.native native()] member function.
+
+[heading See Also]
+
+[link boost_asio.reference.local__connect_pair local::connect_pair],
+[link boost_asio.reference.local__datagram_protocol local::datagram_protocol], +[link boost_asio.reference.local__datagram_protocol.endpoint local::datagram_protocol::endpoint], +[link boost_asio.reference.local__datagram_protocol.socket local::datagram_protocol::socket],
+[link boost_asio.reference.local__stream_protocol local::stream_protocol],
+[link boost_asio.reference.local__stream_protocol.acceptor local::stream_protocol::acceptor], +[link boost_asio.reference.local__stream_protocol.endpoint local::stream_protocol::endpoint], +[link boost_asio.reference.local__stream_protocol.iostream local::stream_protocol::iostream], +[link boost_asio.reference.local__stream_protocol.socket local::stream_protocol::socket], +[link boost_asio.examples.unix_domain_sockets UNIX domain sockets examples].
+
+[heading Notes]
+
+UNIX domain sockets are only available at compile time if supported by the
+target operating system. A program may test for the macro
+`BOOST_ASIO_HAS_LOCAL_SOCKETS` to determine whether they are supported.
+
+[endsect]
+
+[section:stream_descriptor Stream-Oriented File Descriptors]
+
+Boost.Asio includes classes added to permit synchronous and asynchronous read and
+write operations to be performed on POSIX file descriptors, such as pipes,
+standard input and output, and various devices (but /not/ regular files).
+
+For example, to perform read and write operations on standard input
+and output, the following objects may be created:
+
+  posix::stream_descriptor in(my_io_service, ::dup(STDIN_FILENO));
+  posix::stream_descriptor out(my_io_service, ::dup(STDOUT_FILENO));
+
+These are then used as synchronous or asynchronous read and write streams. This +means the objects can be used with any of the [link boost_asio.reference.read
+read()], [link boost_asio.reference.async_read async_read()], [link
+boost_asio.reference.write write()], [link boost_asio.reference.async_write async_write()],
+[link boost_asio.reference.read_until read_until()] or [link
+boost_asio.reference.async_read_until async_read_until()] free functions.
+
+[heading See Also]
+
+[link boost_asio.reference.posix__stream_descriptor posix::stream_descriptor], +[link boost_asio.reference.posix__basic_stream_descriptor posix::basic_stream_descriptor], +[link boost_asio.reference.posix__stream_descriptor_service posix::stream_descriptor_service],
+[link boost_asio.examples.chat Chat example].
+
+[heading Notes]
+
+POSIX stream descriptors are only available at compile time if supported by the
+target operating system. A program may test for the macro
+`BOOST_ASIO_HAS_POSIX_STREAM_DESCRIPTOR` to determine whether they are supported.
+
+[endsect]
+
+[endsect]
=======================================
--- /dev/null
+++ /trunk/libs/asio/doc/overview/proactor.dot  Sun Feb  7 18:57:55 2010
@@ -0,0 +1,100 @@
+digraph g
+{
+  edge
+    [
+      fontname="Helvetica",
+      fontsize=10,
+      labelfontname="Helvetica",
+      labelfontsize=10
+    ];
+
+  node
+    [
+      fontname="Helvetica",
+      fontsize=10,
+      shape=record
+    ];
+
+  initiator
+    [
+      label="Initiator"
+    ];
+
+  async_processor
+    [
+      label="Asynchronous\nOperation Processor"
+    ];
+
+  async_op
+    [
+      label="Asynchronous\nOperation"
+    ];
+
+  completion_queue
+    [
+      label="Completion\nEvent Queue"
+    ];
+
+  async_event_demuxer
+    [
+      label="Asynchronous\nEvent Demultiplexer"
+    ];
+
+  proactor
+    [
+      label="Proactor"
+    ];
+
+  handler
+    [
+      label="Completion\nHandler"
+    ];
+
+  initiator -> async_processor
+    [
+      label="uses",
+      style="dashed"
+    ];
+
+  initiator -> async_op
+    [
+      label="starts",
+      style="dashed"
+    ];
+
+  initiator -> handler
+    [
+      label="creates",
+      style="dashed"
+    ];
+
+  async_processor -> async_op
+    [
+      label="executes",
+      style="dashed"
+    ];
+
+  async_processor -> completion_queue
+    [
+      label="enqueues",
+      style="dashed"
+    ];
+
+  async_op -> handler;
+
+  async_event_demuxer -> completion_queue
+    [
+      label="dequeues",
+      style="dashed"
+    ];
+
+  proactor -> async_event_demuxer
+    [
+    ];
+
+  proactor -> handler
+    [
+      label="demultiplexes\n& dispatches"
+      style="dashed"
+    ];
+}
=======================================
--- /dev/null
+++ /trunk/libs/asio/doc/overview/protocols.qbk Sun Feb  7 18:57:55 2010
@@ -0,0 +1,125 @@
+[/
+ / Copyright (c) 2003-2010 Christopher M. Kohlhoff (chris at kohlhoff dot com)
+ /
+ / 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)
+ /]
+
+[section:protocols TCP, UDP and ICMP]
+
+Boost.Asio provides off-the-shelf support for the internet protocols TCP, UDP and
+ICMP.
+
+[heading TCP Clients]
+
+Hostname resolution is performed using a resolver, where host and service names
+are looked up and converted into one or more endpoints:
+
+  ip::tcp::resolver resolver(my_io_service);
+  ip::tcp::resolver::query query("www.boost.org", "http");
+  ip::tcp::resolver::iterator iter = resolver.resolve(query);
+  ip::tcp::resolver::iterator end; // End marker.
+  while (iter != end)
+  {
+    ip::tcp::endpoint endpoint = *iter++;
+    std::cout << endpoint << std::endl;
+  }
+
+The list of endpoints obtained above could contain both IPv4 and IPv6 endpoints, +so a program may try each of them until it finds one that works. This keeps the
+client program independent of a specific IP version.
+
+When an endpoint is available, a socket can be created and connected:
+
+  ip::tcp::socket socket(my_io_service);
+  socket.connect(endpoint);
+
+Data may be read from or written to a connected TCP socket using the [link
+boost_asio.reference.basic_stream_socket.receive receive()], [link
+boost_asio.reference.basic_stream_socket.async_receive async_receive()], [link
+boost_asio.reference.basic_stream_socket.send send()] or [link
+boost_asio.reference.basic_stream_socket.async_send async_send()] member functions. +However, as these could result in [link boost_asio.overview.core.streams short writes +or reads], an application will typically use the following operations instead: +[link boost_asio.reference.read read()], [link boost_asio.reference.async_read
+async_read()], [link boost_asio.reference.write write()] and [link
+boost_asio.reference.async_write async_write()].
+
+[heading TCP Servers]
+
+A program uses an acceptor to accept incoming TCP connections:
+
+  ip::tcp::acceptor acceptor(my_io_service, my_endpoint);
+  ...
+  ip::tcp::socket socket(my_io_service);
+  acceptor.accept(socket);
+
+After a socket has been successfully accepted, it may be read from or written
+to as illustrated for TCP clients above.
+
+[heading UDP]
+
+UDP hostname resolution is also performed using a resolver:
+
+  ip::udp::resolver resolver(my_io_service);
+  ip::udp::resolver::query query("localhost", "daytime");
+  ip::udp::resolver::iterator iter = resolver.resolve(query);
+  ...
+
+A UDP socket is typically bound to a local endpoint. The following code will
+create an IP version 4 UDP socket and bind it to the "any" address on port
+`12345`:
+
+  ip::udp::endpoint endpoint(ip::udp::v4(), 12345);
+  ip::udp::socket socket(my_io_service, endpoint);
+
+Data may be read from or written to an unconnected UDP socket using the [link +boost_asio.reference.basic_datagram_socket.receive_from receive_from()], [link +boost_asio.reference.basic_datagram_socket.async_receive_from async_receive_from()], +[link boost_asio.reference.basic_datagram_socket.send_to send_to()] or [link +boost_asio.reference.basic_datagram_socket.async_send_to async_send_to()] member
+functions. For a connected UDP socket, use the [link
+boost_asio.reference.basic_datagram_socket.receive receive()], [link
+boost_asio.reference.basic_datagram_socket.async_receive async_receive()], [link
+boost_asio.reference.basic_datagram_socket.send send()] or [link
+boost_asio.reference.basic_datagram_socket.async_send async_send()] member functions.
+
+[heading ICMP]
+
+As with TCP and UDP, ICMP hostname resolution is performed using a resolver:
+
+  ip::icmp::resolver resolver(my_io_service);
+  ip::icmp::resolver::query query("localhost", "");
+  ip::icmp::resolver::iterator iter = resolver.resolve(query);
+  ...
+
+An ICMP socket may be bound to a local endpoint. The following code will create
+an IP version 6 ICMP socket and bind it to the "any" address:
+
+  ip::icmp::endpoint endpoint(ip::icmp::v6(), 0);
+  ip::icmp::socket socket(my_io_service, endpoint);
+
+The port number is not used for ICMP.
+
+Data may be read from or written to an unconnected ICMP socket using the [link
+boost_asio.reference.basic_raw_socket.receive_from receive_from()], [link
+boost_asio.reference.basic_raw_socket.async_receive_from async_receive_from()],
+[link boost_asio.reference.basic_raw_socket.send_to send_to()] or [link
+boost_asio.reference.basic_raw_socket.async_send_to async_send_to()] member
+functions.
+
+[heading Other Protocols]
+
+Support for other socket protocols (such as Bluetooth or IRCOMM sockets) can be +added by implementing the [link boost_asio.reference.Protocol Protocol] type
+requirements.
+
+[heading See Also]
+
+[link boost_asio.reference.ip__tcp ip::tcp],
+[link boost_asio.reference.ip__udp ip::udp],
+[link boost_asio.reference.ip__icmp ip::icmp],
+[link boost_asio.tutorial.tutdaytime1 daytime protocol tutorials],
+[link boost_asio.examples.icmp ICMP ping example].
+
+[endsect]
=======================================
--- /dev/null
+++ /trunk/libs/asio/doc/overview/rationale.qbk Sun Feb  7 18:57:55 2010
@@ -0,0 +1,54 @@
+[/
+ / Copyright (c) 2003-2010 Christopher M. Kohlhoff (chris at kohlhoff dot com)
+ /
+ / 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)
+ /]
+
+[section:rationale Rationale]
+
+Most programs interact with the outside world in some way, whether it be via a +file, a network, a serial cable, or the console. Sometimes, as is the case with +networking, individual I/O operations can take a long time to complete. This
+poses particular challenges to application development.
+
+Boost.Asio provides the tools to manage these long running operations, without
+requiring programs to use concurrency models based on threads and explicit
+locking.
+
+The Boost.Asio library is intended for programmers using C++ for systems programming,
+where access to operating system functionality such as networking is often
+required. In particular, Boost.Asio addresses the following goals:
+
+* [*Portability.] The library should support a range of commonly used operating
+systems, and provide consistent behaviour across these operating systems.
+
+* [*Scalability.] The library should facilitate the development of network
+applications that scale to thousands of concurrent connections. The library
+implementation for each operating system should use the mechanism that best
+enables this scalability.
+
+* [*Efficiency.] The library should support techniques such as scatter-gather
+I/O, and allow programs to minimise data copying.
+
+* [*Model concepts from established APIs, such as BSD sockets.] The
+BSD socket API is widely implemented and understood, and is covered in much
+literature. Other programming languages often use a similar interface for
+networking APIs. As far as is reasonable, Boost.Asio should leverage existing
+practice.
+
+* [*Ease of use.] The library should provide a lower entry barrier for new
+users by taking a toolkit, rather than framework, approach. That is, it should +try to minimise the up-front investment in time to just learning a few basic +rules and guidelines. After that, a library user should only need to understand
+the specific functions that are being used.
+
+* [*Basis for further abstraction.] The library should permit the development
+of other libraries that provide higher levels of abstraction. For example,
+implementations of commonly used protocols such as HTTP.
+
+Although Boost.Asio started life focused primarily on networking, its concepts of +asynchronous I/O have been extended to include other operating system resources
+such as serial ports, file descriptors, and so on.
+
+[endsect]
=======================================
--- /dev/null
+++ /trunk/libs/asio/doc/overview/reactor.qbk   Sun Feb  7 18:57:55 2010
@@ -0,0 +1,43 @@
+[/
+ / Copyright (c) 2003-2010 Christopher M. Kohlhoff (chris at kohlhoff dot com)
+ /
+ / 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)
+ /]
+
+[section:reactor Reactor-Style Operations]
+
+Sometimes a program must be integrated with a third-party library that wants to +perform the I/O operations itself. To facilitate this, Boost.Asio includes a
+`null_buffers` type that can be used with both read and write operations. A
+`null_buffers` operation doesn't return until the I/O object is "ready" to
+perform the operation.
+
+As an example, to perform a non-blocking read something like the
+following may be used:
+
+  ip::tcp::socket socket(my_io_service);
+  ...
+  ip::tcp::socket::non_blocking nb(true);
+  socket.io_control(nb);
+  ...
+  socket.async_read_some(null_buffers(), read_handler);
+  ...
+  void read_handler(boost::system::error_code ec)
+  {
+    if (!ec)
+    {
+      std::vector<char> buf(socket.available());
+      socket.read_some(buffer(buf));
+    }
+  }
+
+These operations are supported for sockets on all platforms, and for the POSIX
+stream-oriented descriptor classes.
+
+[heading See Also]
+
+[link boost_asio.reference.null_buffers null_buffers],
+[link boost_asio.examples.nonblocking nonblocking example].
+
+[endsect]
=======================================
--- /dev/null
+++ /trunk/libs/asio/doc/overview/serial_ports.qbk      Sun Feb  7 18:57:55 2010
@@ -0,0 +1,47 @@
+[/
+ / Copyright (c) 2003-2010 Christopher M. Kohlhoff (chris at kohlhoff dot com)
+ /
+ / 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)
+ /]
+
+[section:serial_ports Serial Ports]
+
+Boost.Asio includes classes for creating and manipulating serial ports in a portable
+manner. For example, a serial port may be opened using:
+
+  serial_port port(my_io_service, name);
+
+where name is something like `"COM1"` on Windows, and `"/dev/ttyS0"` on POSIX
+platforms.
+
+Once opened the serial port may be used as a stream. This means the objects can
+be used with any of the [link boost_asio.reference.read read()], [link
+boost_asio.reference.async_read async_read()], [link boost_asio.reference.write write()],
+[link boost_asio.reference.async_write async_write()], [link
+boost_asio.reference.read_until read_until()] or [link
+boost_asio.reference.async_read_until async_read_until()] free functions.
+
+The serial port implementation also includes option classes for configuring the
+port's baud rate, flow control type, parity, stop bits and character size.
+
+[heading See Also]
+
+[link boost_asio.reference.serial_port serial_port],
+[link boost_asio.reference.serial_port_base serial_port_base],
+[link boost_asio.reference.basic_serial_port basic_serial_port],
+[link boost_asio.reference.serial_port_service serial_port_service],
+[link boost_asio.reference.serial_port_base__baud_rate serial_port_base::baud_rate], +[link boost_asio.reference.serial_port_base__flow_control serial_port_base::flow_control], +[link boost_asio.reference.serial_port_base__parity serial_port_base::parity], +[link boost_asio.reference.serial_port_base__stop_bits serial_port_base::stop_bits], +[link boost_asio.reference.serial_port_base__character_size serial_port_base::character_size].
+
+[heading Notes]
+
+Serial ports are available on all POSIX platforms. For Windows, serial ports +are only available at compile time when the I/O completion port backend is used
+(which is the default). A program may test for the macro
+`BOOST_ASIO_HAS_SERIAL_PORTS` to determine whether they are supported.
+
+[endsect]
=======================================
--- /dev/null
+++ /trunk/libs/asio/doc/overview/ssl.qbk       Sun Feb  7 18:57:55 2010
@@ -0,0 +1,74 @@
+[/
+ / Copyright (c) 2003-2010 Christopher M. Kohlhoff (chris at kohlhoff dot com)
+ /
+ / 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)
+ /]
+
+[section:ssl SSL]
+
+Boost.Asio contains classes and class templates for basic SSL support. These classes +allow encrypted communication to be layered on top of an existing stream, such
+as a TCP socket.
+
+Before creating an encrypted stream, an application must construct an SSL
+context object. This object is used to set SSL options such as verification
+mode, certificate files, and so on. As an illustration, client-side
+initialisation may look something like:
+
+  ssl::context ctx(my_io_service, ssl::context::sslv23);
+  ctx.set_verify_mode(ssl::context::verify_peer);
+  ctx.load_verify_file("ca.pem");
+
+To use SSL with a TCP socket, one may write:
+
+  ssl::stream<ip::tcp::socket> ssl_sock(my_io_service, ctx);
+
+To perform socket-specific operations, such as establishing an outbound
+connection or accepting an incoming one, the underlying socket must first be
+obtained using the `ssl::stream` template's [link
+boost_asio.reference.ssl__stream.lowest_layer `lowest_layer()`] member function:
+
+  ip::tcp::socket::lowest_layer_type& sock = ssl_sock.lowest_layer();
+  sock.connect(my_endpoint);
+
+In some use cases the underlying stream object will need to have a longer
+lifetime than the SSL stream, in which case the template parameter should be a
+reference to the stream type:
+
+  ip::tcp::socket sock(my_io_service);
+  ssl::stream<ip::tcp::socket&> ssl_sock(sock, ctx);
+
+SSL handshaking must be performed prior to transmitting or receiving data over
+an encrypted connection. This is accomplished using the `ssl::stream`
+template's [link boost_asio.reference.ssl__stream.handshake handshake()] or
+[link boost_asio.reference.ssl__stream.async_handshake async_handshake()] member
+functions.
+
+Once connected, SSL stream objects are used as synchronous or asynchronous read
+and write streams. This means the objects can be used with any of the [link
+boost_asio.reference.read read()], [link boost_asio.reference.async_read async_read()], +[link boost_asio.reference.write write()], [link boost_asio.reference.async_write +async_write()], [link boost_asio.reference.read_until read_until()] or [link
+boost_asio.reference.async_read_until async_read_until()] free functions.
+
+[heading See Also]
+
+[link boost_asio.reference.ssl__basic_context ssl::basic_context],
+[link boost_asio.reference.ssl__context ssl::context],
+[link boost_asio.reference.ssl__context_base ssl::context_base],
+[link boost_asio.reference.ssl__context_service ssl::context_service],
+[link boost_asio.reference.ssl__stream ssl::stream],
+[link boost_asio.reference.ssl__stream_base ssl::stream_base],
+[link boost_asio.reference.ssl__stream_service ssl::stream_service],
+[link boost_asio.examples.ssl SSL example].
+
+[heading Notes]
+
+[@http://www.openssl.org OpenSSL] is required to make use of Boost.Asio's SSL
+support. When an application needs to use OpenSSL functionality that is not
+wrapped by Boost.Asio, the underlying OpenSSL types may be obtained by calling [link +boost_asio.reference.ssl__basic_context.impl `ssl::context::impl()`] or [link
+boost_asio.reference.ssl__stream.impl `ssl::stream::impl()`].
+
+[endsect]
=======================================
--- /dev/null
+++ /trunk/libs/asio/doc/overview/strands.qbk   Sun Feb  7 18:57:55 2010
@@ -0,0 +1,62 @@
+[/
+ / Copyright (c) 2003-2010 Christopher M. Kohlhoff (chris at kohlhoff dot com)
+ /
+ / 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)
+ /]
+
+[section:strands Strands: Use Threads Without Explicit Locking]
+
+A strand is defined as a strictly sequential invocation of event handlers (i.e.
+no concurrent invocation). Use of strands allows execution of code in a
+multithreaded program without the need for explicit locking (e.g. using
+mutexes).
+
+Strands may be either implicit or explicit, as illustrated by the following
+alternative approaches:
+
+* Calling io_service::run() from only one thread means all event handlers
+ execute in an implicit strand, due to the io_service's guarantee that handlers
+  are only invoked from inside run().
+
+* Where there is a single chain of asynchronous operations associated with a + connection (e.g. in a half duplex protocol implementation like HTTP) there is + no possibility of concurrent execution of the handlers. This is an implicit
+  strand.
+
+* An explicit strand is an instance of `io_service::strand`. All event handler
+  function objects need to be wrapped using `io_service::strand::wrap()` or
+  otherwise posted/dispatched through the `io_service::strand` object.
+
+In the case of composed asynchronous operations, such as `async_read()` or
+`async_read_until()`, if a completion handler goes through a strand, then all +intermediate handlers should also go through the same strand. This is needed to +ensure thread safe access for any objects that are shared between the caller
+and the composed operation (in the case of `async_read()` it's the socket,
+which the caller can close() to cancel the operation). This is done by having
+hook functions for all intermediate handlers which forward the calls to the
+customisable hook associated with the final handler:
+
+  struct my_handler
+  {
+    void operator()() { ... }
+  };
+
+  template<class F>
+  void asio_handler_invoke(F f, my_handler*)
+  {
+    // Do custom invocation here.
+    // Default implementation calls f();
+  }
+
+The `io_service::strand::wrap()` function creates a new completion handler that +defines `asio_handler_invoke` so that the function object is executed through
+the strand.
+
+[heading See Also]
+
+[link boost_asio.reference.io_service__strand io_service::strand],
+[link boost_asio.tutorial.tuttimer5 tutorial Timer.5],
+[link boost_asio.examples.http_server_3 HTTP server 3 example].
+
+[endsect]
=======================================
--- /dev/null
+++ /trunk/libs/asio/doc/overview/streams.qbk   Sun Feb  7 18:57:55 2010
@@ -0,0 +1,62 @@
+[/
+ / Copyright (c) 2003-2010 Christopher M. Kohlhoff (chris at kohlhoff dot com)
+ /
+ / 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)
+ /]
+
+[section:streams Streams, Short Reads and Short Writes]
+
+Many I/O objects in Boost.Asio are stream-oriented. This means that:
+
+* There are no message boundaries. The data being transferred is a continuous
+  sequence of bytes.
+
+* Read or write operations may transfer fewer bytes than requested. This is
+  referred to as a short read or short write.
+
+Objects that provide stream-oriented I/O model one or more of the following
+type requirements:
+
+* `SyncReadStream`, where synchronous read operations are performed using a
+  member function called `read_some()`.
+
+* `AsyncReadStream`, where asynchronous read operations are performed using a
+  member function called `async_read_some()`.
+
+* `SyncWriteStream`, where synchronous write operations are performed using a
+  member function called `write_some()`.
+
+* `AsyncWriteStream`, where synchronous write operations are performed using a
+  member function called `async_write_some()`.
+
+Examples of stream-oriented I/O objects include `ip::tcp::socket`,
+`ssl::stream<>`, `posix::stream_descriptor`, `windows::stream_handle`, etc.
+
+Programs typically want to transfer an exact number of bytes. When a short read +or short write occurs the program must restart the operation, and continue to +do so until the required number of bytes has been transferred. Boost.Asio provides
+generic functions that do this automatically: `read()`, `async_read()`,
+`write()` and `async_write()`.
+
+[heading Why EOF is an Error]
+
+* The end of a stream can cause `read`, `async_read`, `read_until` or
+  `async_read_until` functions to violate their contract. E.g.
+  a read of N bytes may finish early due to EOF.
+
+* An EOF error may be used to distinguish the end of a stream from a successful
+  read of size 0.
+
+[heading See Also]
+
+[link boost_asio.reference.async_read async_read()],
+[link boost_asio.reference.async_write async_write()],
+[link boost_asio.reference.read read()],
+[link boost_asio.reference.write write()],
+[link boost_asio.reference.AsyncReadStream AsyncReadStream],
+[link boost_asio.reference.AsyncWriteStream AsyncWriteStream],
+[link boost_asio.reference.SyncReadStream SyncReadStream],
+[link boost_asio.reference.SyncWriteStream SyncWriteStream].
+
+[endsect]
=======================================
--- /dev/null
+++ /trunk/libs/asio/doc/overview/sync_op.dot   Sun Feb  7 18:57:55 2010
@@ -0,0 +1,67 @@
+digraph g
+{
+  graph
+    [
+      nodesep="0.6"
+    ];
+
+  edge
+    [
+      fontname="Helvetica",
+      fontsize=10,
+      labelfontname="Helvetica",
+      labelfontsize=10
+    ];
+
+  node
+    [
+      fontname="Helvetica",
+      fontsize=10,
+      shape=box
+    ];
+
+  edge
+    [
+      arrowhead="open"
+    ]
+
+  // Program elements.
+  {
+    operating_system [ label="Operating System", shape=ellipse ];
+    io_service [ label="io_service" ];
+    io_object [ label="I/O Object\ne.g. socket" ];
+    your_program [ label="Your Program" ];
+  }
+
+  // Owning relationships.
+  {
+    edge [ arrowtail="diamond" ];
+    your_program:w -> io_object:nw;
+    your_program:se -> io_service:ne;
+  }
+
+  // Non-owning relationships;
+  {
+    io_object:sw -> io_service:w;
+  }
+
+  // Actions.
+  {
+    edge [ style="dashed", color="#808080" ];
+
+    // Forward actions.
+    {
+      your_program:sw -> io_object:n [ label="1" ];
+      io_object:s -> io_service:nw [ label="2" ];
+      io_service:sw -> operating_system:nw [ label="3" ];
+    }
+
+    // Reverse actions.
+    {
+      edge [ arrowhead="none", arrowtail="open" ];
+      io_service:se -> operating_system:ne [ label="4" ];
+      io_object:se -> io_service:n [ label="5" ];
+      your_program:s -> io_object:ne [ label="6" ];
+    }
+  }
+}
=======================================
--- /dev/null
+++ /trunk/libs/asio/doc/overview/threads.qbk   Sun Feb  7 18:57:55 2010
@@ -0,0 +1,76 @@
+[/
+ / Copyright (c) 2003-2010 Christopher M. Kohlhoff (chris at kohlhoff dot com)
+ /
+ / 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)
+ /]
+
+[section:threads Threads and Boost.Asio]
+
+[heading Thread Safety]
+
+In general, it is safe to make concurrent use of distinct objects, but unsafe +to make concurrent use of a single object. However, types such as `io_service`
+provide a stronger guarantee that it is safe to use a single object
+concurrently.
+
+[heading Thread Pools]
+
+Multiple threads may call `io_service::run()` to set up a pool of threads from +which completion handlers may be invoked. This approach may also be used with +`io_service::post()` to use a means to perform any computational tasks across a
+thread pool.
+
+Note that all threads that have joined an `io_service`'s pool are considered
+equivalent, and the `io_service` may distribute work across them in an
+arbitrary fashion.
+
+[heading Internal Threads]
+
+The implementation of this library for a particular platform may make use of
+one or more internal threads to emulate asynchronicity. As far as possible,
+these threads must be invisible to the library user. In particular, the threads:
+
+* must not call the user's code directly; and
+
+* must block all signals.
+
+[note The implementation currently violates the first of these rules for the
+following functions:
+
+[mdash] `ip::basic_resolver::async_resolve()` on all platforms.
+
+[mdash] `basic_socket::async_connect()` on Windows.
+
+[mdash] Any operation involving `null_buffers()` on Windows, other than an
+asynchronous read performed on a stream-oriented socket.]
+
+This approach is complemented by the following guarantee:
+
+* Asynchronous completion handlers will only be called from threads that are
+  currently calling `io_service::run()`.
+
+Consequently, it is the library user's responsibility to create and manage all
+threads to which the notifications will be delivered.
+
+The reasons for this approach include:
+
+* By only calling `io_service::run()` from a single thread, the user's code can
+  avoid the development complexity associated with synchronisation. For
+  example, a library user can implement scalable servers that are
+  single-threaded (from the user's point of view).
+
+* A library user may need to perform initialisation in a thread shortly after
+  the thread starts and before any other application code is executed. For
+ example, users of Microsoft's COM must call `CoInitializeEx` before any other
+  COM operations can be called from that thread.
+
+* The library interface is decoupled from interfaces for thread creation and + management, and permits implementations on platforms where threads are not
+  available.
+
+[heading See Also]
+
+[link boost_asio.reference.io_service io_service].
+
+[endsect]
=======================================
--- /dev/null
+++ /trunk/libs/asio/doc/overview/timers.qbk    Sun Feb  7 18:57:55 2010
@@ -0,0 +1,53 @@
+[/
+ / Copyright (c) 2003-2010 Christopher M. Kohlhoff (chris at kohlhoff dot com)
+ /
+ / 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)
+ /]
+
+[section:timers Timers]
+
+Long running I/O operations will often have a deadline by which they must have +completed. These deadlines may be expressed as absolute times, but are often
+calculated relative to the current time.
+
+As a simple example, to perform a synchronous wait operation on a timer using a
+relative time one may write:
+
+  io_service i;
+  ...
+  deadline_timer t(i);
+  t.expires_from_now(boost::posix_time::seconds(5));
+  t.wait();
+
+More commonly, a program will perform an asynchronous wait operation on a
+timer:
+
+  void handler(boost::system::error_code ec) { ... }
+  ...
+  io_service i;
+  ...
+  deadline_timer t(i);
+  t.expires_from_now(boost::posix_time::milliseconds(400));
+  t.async_wait(handler);
+  ...
+  i.run();
+
+The deadline associated with a timer may be also be obtained as a relative time:
+
+  boost::posix_time::time_duration time_until_expiry
+    = t.expires_from_now();
+
+or as an absolute time to allow composition of timers:
+
+  deadline_timer t2(i);
+  t2.expires_at(t.expires_at() + boost::posix_time::seconds(30));
+
+[heading See Also]
+
+[link boost_asio.reference.basic_deadline_timer basic_deadline_timer],
+[link boost_asio.reference.deadline_timer deadline_timer],
+[link boost_asio.reference.deadline_timer_service deadline_timer_service],
+[link boost_asio.tutorial.tuttimer1 timer tutorials].
+
+[endsect]
=======================================
--- /dev/null
+++ /trunk/libs/asio/doc/overview/windows.qbk   Sun Feb  7 18:57:55 2010
@@ -0,0 +1,91 @@
+[/
+ / Copyright (c) 2003-2010 Christopher M. Kohlhoff (chris at kohlhoff dot com)
+ /
+ / 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)
+ /]
+
+[section:windows Windows-Specific Functionality]
+
+[link boost_asio.overview.windows.stream_handle Stream-Oriented HANDLEs]
+
+[link boost_asio.overview.windows.random_access_handle Random-Access HANDLEs]
+
+[section:stream_handle Stream-Oriented HANDLEs]
+
+Boost.Asio contains classes to allow asynchronous read and write operations to be
+performed on Windows `HANDLE`s, such as named pipes.
+
+For example, to perform asynchronous operations on a named pipe, the following
+object may be created:
+
+  HANDLE handle = ::CreateFile(...);
+  windows::stream_handle pipe(my_io_service, handle);
+
+These are then used as synchronous or asynchronous read and write streams. This +means the objects can be used with any of the [link boost_asio.reference.read
+read()], [link boost_asio.reference.async_read async_read()], [link
+boost_asio.reference.write write()], [link boost_asio.reference.async_write
+async_write()], [link boost_asio.reference.read_until read_until()] or [link
+boost_asio.reference.async_read_until async_read_until()] free functions.
+
+The kernel object referred to by the `HANDLE` must support use with I/O
+completion ports (which means that named pipes are supported, but anonymous
+pipes and console streams are not).
+
+[heading See Also]
+
+[link boost_asio.reference.windows__stream_handle windows::stream_handle],
+[link boost_asio.reference.windows__basic_stream_handle windows::basic_stream_handle], +[link boost_asio.reference.windows__stream_handle_service windows::stream_handle_service].
+
+[heading Notes]
+
+Windows stream `HANDLE`s are only available at compile time when targeting
+Windows and only when the I/O completion port backend is used (which is the
+default). A program may test for the macro `BOOST_ASIO_HAS_WINDOWS_STREAM_HANDLE` to
+determine whether they are supported.
+
+[endsect]
+
+[/-----------------------------------------------------------------------------]
+
+[section:random_access_handle Random-Access HANDLEs]
+
+Boost.Asio provides Windows-specific classes that permit asynchronous read and write
+operations to be performed on HANDLEs that refer to regular files.
+
+For example, to perform asynchronous operations on a file the following object
+may be created:
+
+  HANDLE handle = ::CreateFile(...);
+  windows::random_access_handle file(my_io_service, handle);
+
+Data may be read from or written to the handle using one of the
+`read_some_at()`, `async_read_some_at()`, `write_some_at()` or
+`async_write_some_at()` member functions. However, like the equivalent
+functions (`read_some()`, etc.) on streams, these functions are only required +to transfer one or more bytes in a single operation. Therefore free functions
+called [link boost_asio.reference.read_at read_at()], [link
+boost_asio.reference.async_read_at async_read_at()], [link boost_asio.reference.write_at +write_at()] and [link boost_asio.reference.async_write_at async_write_at()] have been +created to repeatedly call the corresponding [^[**]_some_at()] function until
+all data has been transferred.
+
+[heading See Also]
+
+[link boost_asio.reference.windows__random_access_handle windows::random_access_handle], +[link boost_asio.reference.windows__basic_random_access_handle windows::basic_random_access_handle], +[link boost_asio.reference.windows__random_access_handle_service windows::random_access_handle_service].
+
+[heading Notes]
+
+Windows random-access `HANDLE`s are only available at compile time when
+targeting Windows and only when the I/O completion port backend is used (which
+is the default). A program may test for the macro
+`BOOST_ASIO_HAS_WINDOWS_RANDOM_ACCESS_HANDLE` to determine whether they are
+supported.
+
+[endsect]
+
+[endsect]
=======================================
--- /dev/null
+++ /trunk/libs/asio/doc/overview.qbk   Sun Feb  7 18:57:55 2010
@@ -0,0 +1,81 @@
+[/
+ / Copyright (c) 2003-2010 Christopher M. Kohlhoff (chris at kohlhoff dot com)
+ /
+ / 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)
+ /]
+
+[section:overview Overview]
+
+* [link boost_asio.overview.rationale Rationale]
+* [link boost_asio.overview.core Core Concepts and Functionality]
+  * [link boost_asio.overview.core.basics Basic Boost.Asio Anatomy]
+ * [link boost_asio.overview.core.async The Proactor Design Pattern: Concurrency Without Threads]
+  * [link boost_asio.overview.core.threads Threads and Boost.Asio]
+ * [link boost_asio.overview.core.strands Strands: Use Threads Without Explicit Locking]
+  * [link boost_asio.overview.core.buffers Buffers]
+ * [link boost_asio.overview.core.streams Streams, Short Reads and Short Writes]
+  * [link boost_asio.overview.core.reactor Reactor-Style Operations]
+  * [link boost_asio.overview.core.line_based Line-Based Operations]
+  * [link boost_asio.overview.core.allocation Custom Memory Allocation]
+* [link boost_asio.overview.networking Networking]
+  * [link boost_asio.overview.networking.protocols TCP, UDP and ICMP]
+  * [link boost_asio.overview.networking.iostreams Socket Iostreams]
+ * [link boost_asio.overview.networking.bsd_sockets The BSD Socket API and Boost.Asio]
+* [link boost_asio.overview.timers Timers]
+* [link boost_asio.overview.serial_ports Serial Ports]
+* [link boost_asio.overview.posix POSIX-Specific Functionality]
+  * [link boost_asio.overview.posix.local UNIX Domain Sockets]
+ * [link boost_asio.overview.posix.stream_descriptor Stream-Oriented File Descriptors]
+* [link boost_asio.overview.windows Windows-Specific Functionality]
+ * [link boost_asio.overview.windows.stream_handle Stream-Oriented HANDLEs] + * [link boost_asio.overview.windows.random_access_handle Random-Access HANDLEs]
+* [link boost_asio.overview.ssl SSL]
+* [link boost_asio.overview.implementation Platform-Specific Implementation Notes]
+
+[include overview/rationale.qbk]
+
+[section:core Core Concepts and Functionality]
+
+* [link boost_asio.overview.core.basics Basic Boost.Asio Anatomy]
+* [link boost_asio.overview.core.async The Proactor Design Pattern: Concurrency Without Threads]
+* [link boost_asio.overview.core.threads Threads and Boost.Asio]
+* [link boost_asio.overview.core.strands Strands: Use Threads Without Explicit Locking]
+* [link boost_asio.overview.core.buffers Buffers]
+* [link boost_asio.overview.core.streams Streams, Short Reads and Short Writes]
+* [link boost_asio.overview.core.reactor Reactor-Style Operations]
+* [link boost_asio.overview.core.line_based Line-Based Operations]
+* [link boost_asio.overview.core.allocation Custom Memory Allocation]
+
+[include overview/basics.qbk]
+[include overview/async.qbk]
+[include overview/threads.qbk]
+[include overview/strands.qbk]
+[include overview/buffers.qbk]
+[include overview/streams.qbk]
+[include overview/reactor.qbk]
+[include overview/line_based.qbk]
+[include overview/allocation.qbk]
+
+[endsect]
+
+[section:networking Networking]
+
+* [link boost_asio.overview.networking.protocols TCP, UDP and ICMP]
+* [link boost_asio.overview.networking.iostreams Socket Iostreams]
+* [link boost_asio.overview.networking.bsd_sockets The BSD Socket API and Boost.Asio]
+
+[include overview/protocols.qbk]
+[include overview/iostreams.qbk]
+[include overview/bsd_sockets.qbk]
+
+[endsect]
+
+[include overview/timers.qbk]
+[include overview/serial_ports.qbk]
+[include overview/posix.qbk]
+[include overview/windows.qbk]
+[include overview/ssl.qbk]
+[include overview/implementation.qbk]
+
+[endsect]
=======================================
--- /dev/null
+++ /trunk/libs/asio/doc/reference.dox  Sun Feb  7 18:57:55 2010
@@ -0,0 +1,236 @@
+# Doxyfile 1.4.5
+
+#---------------------------------------------------------------------------
+# Project related configuration options
+#---------------------------------------------------------------------------
+PROJECT_NAME           = "Boost.Asio Reference"
+PROJECT_NUMBER         =
+OUTPUT_DIRECTORY       = .
+CREATE_SUBDIRS         = NO
+OUTPUT_LANGUAGE        = English
+USE_WINDOWS_ENCODING   = NO
+BRIEF_MEMBER_DESC      = YES
+REPEAT_BRIEF           = YES
+ABBREVIATE_BRIEF       =
+ALWAYS_DETAILED_SEC    = YES
+INLINE_INHERITED_MEMB  = YES
+FULL_PATH_NAMES        = YES
+STRIP_FROM_PATH        = ./../../../
+STRIP_FROM_INC_PATH    =
+SHORT_NAMES            = NO
+JAVADOC_AUTOBRIEF      = NO
+MULTILINE_CPP_IS_BRIEF = YES
+DETAILS_AT_TOP         = YES
+INHERIT_DOCS           = NO
+SEPARATE_MEMBER_PAGES  = NO
+TAB_SIZE               = 2
+ALIASES                =
+OPTIMIZE_OUTPUT_FOR_C  = NO
+OPTIMIZE_OUTPUT_JAVA   = NO
+BUILTIN_STL_SUPPORT    = NO
+DISTRIBUTE_GROUP_DOC   = NO
+SUBGROUPING            = YES
+#---------------------------------------------------------------------------
+# Build related configuration options
+#---------------------------------------------------------------------------
+EXTRACT_ALL            = YES
+EXTRACT_PRIVATE        = YES
+EXTRACT_STATIC         = YES
+EXTRACT_LOCAL_CLASSES  = NO
+EXTRACT_LOCAL_METHODS  = NO
+HIDE_UNDOC_MEMBERS     = YES
+HIDE_UNDOC_CLASSES     = YES
+HIDE_FRIEND_COMPOUNDS  = NO
+HIDE_IN_BODY_DOCS      = NO
+INTERNAL_DOCS          = NO
+CASE_SENSE_NAMES       = YES
+HIDE_SCOPE_NAMES       = NO
+SHOW_INCLUDE_FILES     = NO
+INLINE_INFO            = NO
+SORT_MEMBER_DOCS       = NO
+SORT_BRIEF_DOCS        = NO
+SORT_BY_SCOPE_NAME     = NO
+GENERATE_TODOLIST      = NO
+GENERATE_TESTLIST      = NO
+GENERATE_BUGLIST       = NO
+GENERATE_DEPRECATEDLIST= NO
+ENABLED_SECTIONS       =
+MAX_INITIALIZER_LINES  = 30
+SHOW_USED_FILES        = NO
+SHOW_DIRECTORIES       = NO
+FILE_VERSION_FILTER    =
+#---------------------------------------------------------------------------
+# configuration options related to warning and progress messages
+#---------------------------------------------------------------------------
+QUIET                  = NO
+WARNINGS               = YES
+WARN_IF_UNDOCUMENTED   = YES
+WARN_IF_DOC_ERROR      = YES
+WARN_NO_PARAMDOC       = NO
+WARN_FORMAT            = "$file:$line: $text"
+WARN_LOGFILE           =
+#---------------------------------------------------------------------------
+# configuration options related to the input files
+#---------------------------------------------------------------------------
+INPUT                  = ./../../../boost/asio.hpp \
+                         ./../../../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          =
+RECURSIVE              = NO
+EXCLUDE                =
+EXCLUDE_SYMLINKS       = NO
+EXCLUDE_PATTERNS       =
+EXAMPLE_PATH           =
+EXAMPLE_PATTERNS       =
+EXAMPLE_RECURSIVE      = YES
+IMAGE_PATH             =
+INPUT_FILTER           =
+FILTER_PATTERNS        =
+FILTER_SOURCE_FILES    = NO
+#---------------------------------------------------------------------------
+# configuration options related to source browsing
+#---------------------------------------------------------------------------
+SOURCE_BROWSER         = NO
+INLINE_SOURCES         = NO
+STRIP_CODE_COMMENTS    = YES
+REFERENCED_BY_RELATION = NO
+REFERENCES_RELATION    = NO
+USE_HTAGS              = NO
+VERBATIM_HEADERS       = NO
+#---------------------------------------------------------------------------
+# configuration options related to the alphabetical class index
+#---------------------------------------------------------------------------
+ALPHABETICAL_INDEX     = YES
+COLS_IN_ALPHA_INDEX    = 1
+IGNORE_PREFIX          =
+#---------------------------------------------------------------------------
+# configuration options related to the HTML output
+#---------------------------------------------------------------------------
+GENERATE_HTML          = NO
+HTML_OUTPUT            = .
+HTML_FILE_EXTENSION    = .html
+HTML_HEADER            =
+HTML_FOOTER            =
+HTML_STYLESHEET        =
+HTML_ALIGN_MEMBERS     = YES
+GENERATE_HTMLHELP      = NO
+CHM_FILE               =
+HHC_LOCATION           =
+GENERATE_CHI           = NO
+BINARY_TOC             = NO
+TOC_EXPAND             = NO
+DISABLE_INDEX          = YES
+ENUM_VALUES_PER_LINE   = 1
+GENERATE_TREEVIEW      = NO
+TREEVIEW_WIDTH         = 250
+#---------------------------------------------------------------------------
+# configuration options related to the LaTeX output
+#---------------------------------------------------------------------------
+GENERATE_LATEX         = NO
+LATEX_OUTPUT           = latex
+LATEX_CMD_NAME         = latex
+MAKEINDEX_CMD_NAME     = makeindex
+COMPACT_LATEX          = NO
+PAPER_TYPE             = a4wide
+EXTRA_PACKAGES         =
+LATEX_HEADER           =
+PDF_HYPERLINKS         = NO
+USE_PDFLATEX           = NO
+LATEX_BATCHMODE        = NO
+LATEX_HIDE_INDICES     = NO
+#---------------------------------------------------------------------------
+# configuration options related to the RTF output
+#---------------------------------------------------------------------------
+GENERATE_RTF           = NO
+RTF_OUTPUT             = rtf
+COMPACT_RTF            = NO
+RTF_HYPERLINKS         = NO
+RTF_STYLESHEET_FILE    =
+RTF_EXTENSIONS_FILE    =
+#---------------------------------------------------------------------------
+# configuration options related to the man page output
+#---------------------------------------------------------------------------
+GENERATE_MAN           = NO
+MAN_OUTPUT             = man
+MAN_EXTENSION          = .3
+MAN_LINKS              = NO
+#---------------------------------------------------------------------------
+# configuration options related to the XML output
+#---------------------------------------------------------------------------
+GENERATE_XML           = YES
+XML_OUTPUT             = xml
+XML_SCHEMA             =
+XML_DTD                =
+XML_PROGRAMLISTING     = NO
+#---------------------------------------------------------------------------
+# configuration options for the AutoGen Definitions output
+#---------------------------------------------------------------------------
+GENERATE_AUTOGEN_DEF   = NO
+#---------------------------------------------------------------------------
+# configuration options related to the Perl module output
+#---------------------------------------------------------------------------
+GENERATE_PERLMOD       = NO
+PERLMOD_LATEX          = NO
+PERLMOD_PRETTY         = YES
+PERLMOD_MAKEVAR_PREFIX =
+#---------------------------------------------------------------------------
+# Configuration options related to the preprocessor
+#---------------------------------------------------------------------------
+ENABLE_PREPROCESSING   = YES
+MACRO_EXPANSION        = YES
+EXPAND_ONLY_PREDEF     = YES
+SEARCH_INCLUDES        = YES
+INCLUDE_PATH           =
+INCLUDE_FILE_PATTERNS  =
+PREDEFINED             = GENERATING_DOCUMENTATION \
+ BOOST_ASIO_SOCKET_ERROR(e)=implementation_defined \
+                         BOOST_ASIO_NETDB_ERROR(e)=implementation_defined \
+                         BOOST_ASIO_EOF_ERROR(e)=implementation_defined \
+                         BOOST_ASIO_OS_ERROR(e1,e2)=implementation_defined
+EXPAND_AS_DEFINED      =
+SKIP_FUNCTION_MACROS   = YES
+#---------------------------------------------------------------------------
+# Configuration::additions related to external references
+#---------------------------------------------------------------------------
+TAGFILES               =
+GENERATE_TAGFILE       = reference.tags
+ALLEXTERNALS           = NO
+EXTERNAL_GROUPS        = YES
+PERL_PATH              = /usr/bin/perl
+#---------------------------------------------------------------------------
+# Configuration options related to the dot tool
+#---------------------------------------------------------------------------
+CLASS_DIAGRAMS         = NO
+HIDE_UNDOC_RELATIONS   = YES
+HAVE_DOT               = YES
+CLASS_GRAPH            = YES
+COLLABORATION_GRAPH    = NO
+GROUP_GRAPHS           = NO
+UML_LOOK               = NO
+TEMPLATE_RELATIONS     = YES
+INCLUDE_GRAPH          = NO
+INCLUDED_BY_GRAPH      = NO
+CALL_GRAPH             = NO
+GRAPHICAL_HIERARCHY    = NO
+DIRECTORY_GRAPH        = NO
+DOT_IMAGE_FORMAT       = png
+DOT_PATH               =
+DOTFILE_DIRS           =
+MAX_DOT_GRAPH_WIDTH    = 640
+MAX_DOT_GRAPH_HEIGHT   = 640
+MAX_DOT_GRAPH_DEPTH    = 0
+DOT_TRANSPARENT        = NO
+DOT_MULTI_TARGETS      = NO
+GENERATE_LEGEND        = NO
+DOT_CLEANUP            = YES
+#---------------------------------------------------------------------------
+# Configuration::additions related to the search engine
+#---------------------------------------------------------------------------
+SEARCHENGINE           = NO
=======================================
--- /dev/null   
+++ /trunk/libs/asio/doc/reference.qbk  Sun Feb  7 18:57:55 2010
File is too large to display a diff.
=======================================
--- /dev/null
+++ /trunk/libs/asio/doc/reference.xsl  Sun Feb  7 18:57:55 2010
@@ -0,0 +1,1394 @@
+<?xml version="1.0" encoding="utf-8"?>
+<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform"; version="1.0">
+
+<!--
+ Copyright (c) 2003-2010 Christopher M. Kohlhoff (chris at kohlhoff dot com)
+
+ 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)
+-->
+
+<xsl:output method="text"/>
+<xsl:strip-space elements="*"/>
+<xsl:preserve-space elements="para"/>
+
+
+<xsl:variable name="newline">
+<xsl:text>
+</xsl:text>
+</xsl:variable>
+
+
+<!--
+  Loop over all top-level documentation elements (i.e. classes, functions,
+ variables and typedefs at namespace scope). The elements are sorted by name. + Anything in a "detail" namespace or with "_handler" in the name is skipped.
+-->
+<xsl:template match="/doxygen">
+<xsl:text>[/
+ / Copyright (c) 2003-2010 Christopher M. Kohlhoff (chris at kohlhoff dot com)
+ /
+ / 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)
+ /]
+
+[section:reference Reference]
+
+[xinclude quickref.xml]
+
+[include requirements/asynchronous_operations.qbk]
+[include requirements/AcceptHandler.qbk]
+[include requirements/AsyncRandomAccessReadDevice.qbk]
+[include requirements/AsyncRandomAccessWriteDevice.qbk]
+[include requirements/AsyncReadStream.qbk]
+[include requirements/AsyncWriteStream.qbk]
+[include requirements/CompletionHandler.qbk]
+[include requirements/ConnectHandler.qbk]
+[include requirements/ConstBufferSequence.qbk]
+[include requirements/ConvertibleToConstBuffer.qbk]
+[include requirements/ConvertibleToMutableBuffer.qbk]
+[include requirements/DatagramSocketService.qbk]
+[include requirements/DescriptorService.qbk]
+[include requirements/Endpoint.qbk]
+[include requirements/GettableSerialPortOption.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]
+[include requirements/MutableBufferSequence.qbk]
+[include requirements/Protocol.qbk]
+[include requirements/RandomAccessHandleService.qbk]
+[include requirements/RawSocketService.qbk]
+[include requirements/ReadHandler.qbk]
+[include requirements/ResolveHandler.qbk]
+[include requirements/ResolverService.qbk]
+[include requirements/SerialPortService.qbk]
+[include requirements/Service.qbk]
+[include requirements/SettableSerialPortOption.qbk]
+[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/SyncRandomAccessReadDevice.qbk]
+[include requirements/SyncRandomAccessWriteDevice.qbk]
+[include requirements/SyncReadStream.qbk]
+[include requirements/SyncWriteStream.qbk]
+[include requirements/TimeTraits.qbk]
+[include requirements/TimerService.qbk]
+[include requirements/WaitHandler.qbk]
+[include requirements/WriteHandler.qbk]
+
+</xsl:text>
+
+  <xsl:for-each select="
+      compounddef[@kind = 'class' or @kind = 'struct'] |
+      compounddef[@kind = 'namespace']/sectiondef[1]/memberdef">
+ <xsl:sort select="concat((. | ancestor::*)/compoundname, '::', name, ':x')"/>
+    <xsl:sort select="name"/>
+    <xsl:choose>
+      <xsl:when test="@kind='class' or @kind='struct'">
+        <xsl:if test="
+            contains(compoundname, 'asio::') and
+            not(contains(compoundname, '::detail')) and
+            not(contains(compoundname, '_handler'))">
+          <xsl:call-template name="class"/>
+        </xsl:if>
+      </xsl:when>
+      <xsl:otherwise>
+        <xsl:if test="
+            not(contains(ancestor::*/compoundname, '::detail')) and
+            not(contains(ancestor::*/compoundname, '_helper'))">
+          <xsl:call-template name="namespace-memberdef"/>
+        </xsl:if>
+      </xsl:otherwise>
+    </xsl:choose>
+  </xsl:for-each>
+
+  <xsl:value-of select="$newline"/>
+  <xsl:text>[endsect]</xsl:text>
+
+</xsl:template>
+
+
+<!--========== Utilities ==========-->
+
+<xsl:template name="strip-asio-ns">
+  <xsl:param name="name"/>
+  <xsl:choose>
+    <xsl:when test="contains($name, 'boost::system::is_error_code_enum')">
+      <xsl:value-of select="$name"/>
+    </xsl:when>
+    <xsl:when test="contains($name, 'asio::')">
+      <xsl:value-of select="substring-after($name, 'asio::')"/>
+    </xsl:when>
+    <xsl:otherwise>
+      <xsl:value-of select="$name"/>
+    </xsl:otherwise>
+  </xsl:choose>
+</xsl:template>
+
+
+<xsl:template name="strip-ns">
+  <xsl:param name="name"/>
+  <xsl:choose>
+    <xsl:when test="contains($name, 'boost::system::is_error_code_enum')">
+      <xsl:value-of select="$name"/>
+    </xsl:when>
+    <xsl:when test="contains($name, '::') and contains($name, '&lt;')">
+      <xsl:choose>
+ <xsl:when test="string-length(substring-before($name, '::')) &lt; string-length(substring-before($name, '&lt;'))">
+          <xsl:call-template name="strip-ns">
+ <xsl:with-param name="name" select="substring-after($name, '::')"/>
+          </xsl:call-template>
+        </xsl:when>
+        <xsl:otherwise>
+          <xsl:value-of select="$name"/>
+        </xsl:otherwise>
+      </xsl:choose>
+    </xsl:when>
+    <xsl:when test="contains($name, '::')">
+      <xsl:call-template name="strip-ns">
+        <xsl:with-param name="name" select="substring-after($name, '::')"/>
+      </xsl:call-template>
+    </xsl:when>
+    <xsl:otherwise>
+      <xsl:value-of select="$name"/>
+    </xsl:otherwise>
+  </xsl:choose>
+</xsl:template>
+
+
+<xsl:template name="make-id">
+  <xsl:param name="name"/>
+  <xsl:choose>
+    <xsl:when test="contains($name, 'boost::system::')">
+      <xsl:call-template name="make-id">
+        <xsl:with-param name="name"
+         select="substring-after($name, 'boost::system::')"/>
+      </xsl:call-template>
+    </xsl:when>
+    <xsl:when test="contains($name, 'boost::asio::error::')">
+      <xsl:call-template name="make-id">
+        <xsl:with-param name="name"
+ select="concat(substring-before($name, 'boost::asio::error::'), substring-after($name, 'boost::asio::error::'))"/>
+      </xsl:call-template>
+    </xsl:when>
+    <xsl:when test="contains($name, '::')">
+      <xsl:call-template name="make-id">
+        <xsl:with-param name="name"
+ select="concat(substring-before($name, '::'), '__', substring-after($name, '::'))"/>
+      </xsl:call-template>
+    </xsl:when>
+    <xsl:when test="contains($name, '=')">
+      <xsl:call-template name="make-id">
+        <xsl:with-param name="name"
+ select="concat(substring-before($name, '='), '_eq_', substring-after($name, '='))"/>
+      </xsl:call-template>
+    </xsl:when>
+    <xsl:when test="contains($name, '!')">
+      <xsl:call-template name="make-id">
+        <xsl:with-param name="name"
+ select="concat(substring-before($name, '!'), '_not_', substring-after($name, '!'))"/>
+      </xsl:call-template>
+    </xsl:when>
+    <xsl:when test="contains($name, '&lt;')">
+      <xsl:call-template name="make-id">
+        <xsl:with-param name="name"
+ select="concat(substring-before($name, '&lt;'), '_lt_', substring-after($name, '&lt;'))"/>
+      </xsl:call-template>
+    </xsl:when>
+    <xsl:when test="contains($name, '&gt;')">
+      <xsl:call-template name="make-id">
+        <xsl:with-param name="name"
+ select="concat(substring-before($name, '&gt;'), '_gt_', substring-after($name, '&gt;'))"/>
+      </xsl:call-template>
+    </xsl:when>
+    <xsl:when test="contains($name, '+')">
+      <xsl:call-template name="make-id">
+        <xsl:with-param name="name"
+ select="concat(substring-before($name, '+'), '_plus_', substring-after($name, '+'))"/>
+      </xsl:call-template>
+    </xsl:when>
+    <xsl:when test="contains($name, '~')">
+      <xsl:call-template name="make-id">
+        <xsl:with-param name="name"
+ select="concat(substring-before($name, '~'), '_', substring-after($name, '~'))"/>
+      </xsl:call-template>
+    </xsl:when>
+    <xsl:when test="contains($name, ' ')">
+      <xsl:call-template name="make-id">
+        <xsl:with-param name="name"
+ select="concat(substring-before($name, ' '), '_', substring-after($name, ' '))"/>
+      </xsl:call-template>
+    </xsl:when>
+    <xsl:when test="contains($name, 'boost__posix_time__ptime')">
+      <xsl:call-template name="make-id">
+        <xsl:with-param name="name"
+ select="concat(substring-before($name, 'boost__posix_time__ptime'), 'ptime', substring-after($name, 'boost__posix_time__ptime'))"/>
+      </xsl:call-template>
+    </xsl:when>
+    <xsl:otherwise>
+      <xsl:value-of select="$name"/>
+    </xsl:otherwise>
+  </xsl:choose>
+</xsl:template>
+
+
+<!--========== Markup ==========-->
+
+<xsl:template match="para" mode="markup">
+<xsl:text>
+</xsl:text><xsl:apply-templates mode="markup"/><xsl:text>
+</xsl:text>
+</xsl:template>
+
+
+<xsl:template match="para" mode="markup-nested">
+<xsl:apply-templates mode="markup-nested"/>
+</xsl:template>
+
+
+<xsl:template match="title" mode="markup">
+  <xsl:variable name="title">
+    <xsl:value-of select="."/>
+  </xsl:variable>
+  <xsl:if test="string-length($title) > 0">
+[heading <xsl:value-of select="."/>]
+  </xsl:if>
+</xsl:template>
+
+
+<xsl:template match="programlisting" mode="markup">
+  <xsl:value-of select="$newline"/>
+  <xsl:value-of select="$newline"/>
+  <xsl:apply-templates mode="codeline"/>
+  <xsl:value-of select="$newline"/>
+  <xsl:value-of select="$newline"/>
+</xsl:template>
+
+
+<xsl:template match="programlisting" mode="markup-nested">
+  <xsl:value-of select="$newline"/>
+  <xsl:text>``</xsl:text>
+  <xsl:value-of select="$newline"/>
+  <xsl:apply-templates mode="codeline"/>
+  <xsl:if test="substring(., string-length(.)) = $newline">
+    <xsl:value-of select="$newline"/>
+  </xsl:if>
+  <xsl:text>``</xsl:text>
+  <xsl:value-of select="$newline"/>
+</xsl:template>
+
+
+<xsl:template match="codeline" mode="codeline">
+  <xsl:if test="string-length(.) &gt; 0">
+    <xsl:text>  </xsl:text>
+  </xsl:if>
+  <xsl:apply-templates mode="codeline"/>
+  <xsl:value-of select="$newline"/>
+</xsl:template>
+
+
+<xsl:template match="sp" mode="markup">
+<xsl:text> </xsl:text>
+</xsl:template>
+
+
+<xsl:template match="sp" mode="markup-nested">
+<xsl:text> </xsl:text>
+</xsl:template>
+
+
+<xsl:template match="sp" mode="codeline">
+  <xsl:text> </xsl:text>
+</xsl:template>
+
+
+<xsl:template match="linebreak" mode="markup">
+<xsl:text>
+
+</xsl:text>
+</xsl:template>
+
+
+<xsl:template match="linebreak" mode="markup-nested">
+<xsl:text>
+
+</xsl:text>
+</xsl:template>
+
+
+<xsl:template match="computeroutput" mode="markup">
+<xsl:text>`</xsl:text><xsl:value-of select="."/><xsl:text>`</xsl:text>
+</xsl:template>
+
+
+<xsl:template match="computeroutput" mode="markup-nested">
+<xsl:text>`</xsl:text><xsl:value-of select="."/><xsl:text>`</xsl:text>
+</xsl:template>
+
+
+<xsl:template match="listitem" mode="markup">
+* <xsl:value-of select="."/><xsl:text>
+</xsl:text>
+</xsl:template>
+
+
+<xsl:template match="emphasis" mode="markup">[*<xsl:value-of select="."/>]</xsl:template>
+
+
+<xsl:template match="parameterlist" mode="markup">
+  <xsl:choose>
+    <xsl:when test="@kind='param'">
+[heading Parameters]
+    </xsl:when>
+    <xsl:when test="@kind='exception'">
+[heading Exceptions]
+    </xsl:when>
+  </xsl:choose>
+
+[variablelist
+  <xsl:apply-templates mode="markup"/>
+]
+</xsl:template>
+
+
+<xsl:template match="parameteritem" mode="markup">
+[[<xsl:value-of select="parameternamelist"/>][<xsl:apply-templates select="parameterdescription" mode="markup-nested"/>]]
+</xsl:template>
+
+
+<xsl:template match="simplesect" mode="markup">
+  <xsl:choose>
+    <xsl:when test="@kind='return'">
+[heading Return Value]
+      <xsl:apply-templates mode="markup"/>
+    </xsl:when>
+    <xsl:when test="@kind='see'">
+    </xsl:when>
+    <xsl:when test="@kind='note'">
+[heading Remarks]
+      <xsl:apply-templates mode="markup"/>
+    </xsl:when>
+    <xsl:when test="@kind='par'">
+      <xsl:if test="not(starts-with(title, 'Concepts:'))">
+        <xsl:apply-templates mode="markup"/>
+      </xsl:if>
+    </xsl:when>
+    <xsl:otherwise>
+      <xsl:apply-templates mode="markup"/>
+    </xsl:otherwise>
+  </xsl:choose>
+</xsl:template>
+
+
+<xsl:template match="text()" mode="markup">
+  <xsl:variable name="text" select="."/>
+  <xsl:variable name="starts-with-whitespace" select="
+      starts-with($text, ' ') or starts-with($text, $newline)"/>
+  <xsl:variable name="preceding-node-name">
+    <xsl:for-each select="preceding-sibling::*">
+      <xsl:if test="position() = last()">
+        <xsl:value-of select="local-name()"/>
+      </xsl:if>
+    </xsl:for-each>
+  </xsl:variable>
+  <xsl:variable name="after-newline" select="
+      $preceding-node-name = 'programlisting' or
+      $preceding-node-name = 'linebreak'"/>
+  <xsl:choose>
+    <xsl:when test="$starts-with-whitespace and $after-newline">
+      <xsl:call-template name="escape-text">
+        <xsl:with-param name="text">
+          <xsl:call-template name="strip-leading-whitespace">
+            <xsl:with-param name="text" select="$text"/>
+          </xsl:call-template>
+        </xsl:with-param>
+      </xsl:call-template>
+    </xsl:when>
+    <xsl:otherwise>
+      <xsl:call-template name="escape-text">
+        <xsl:with-param name="text" select="$text"/>
+      </xsl:call-template>
+    </xsl:otherwise>
+  </xsl:choose>
+</xsl:template>
+
+
+<xsl:template match="text()" mode="markup-nested">
+  <xsl:variable name="text" select="."/>
+  <xsl:variable name="starts-with-whitespace" select="
+      starts-with($text, ' ') or starts-with($text, $newline)"/>
+  <xsl:variable name="preceding-node-name">
+    <xsl:for-each select="preceding-sibling::*">
+      <xsl:if test="position() = last()">
+        <xsl:value-of select="local-name()"/>
+      </xsl:if>
+    </xsl:for-each>
+  </xsl:variable>
+  <xsl:variable name="after-newline" select="
+      $preceding-node-name = 'programlisting' or
+      $preceding-node-name = 'linebreak'"/>
+  <xsl:choose>
+    <xsl:when test="$starts-with-whitespace and $after-newline">
+      <xsl:call-template name="escape-text">
+        <xsl:with-param name="text">
+          <xsl:call-template name="strip-leading-whitespace">
+            <xsl:with-param name="text" select="$text"/>
+          </xsl:call-template>
+        </xsl:with-param>
+      </xsl:call-template>
+    </xsl:when>
+    <xsl:otherwise>
+      <xsl:call-template name="escape-text">
+        <xsl:with-param name="text" select="$text"/>
+      </xsl:call-template>
+    </xsl:otherwise>
+  </xsl:choose>
+</xsl:template>
+
+
+<xsl:template name="strip-leading-whitespace">
+  <xsl:param name="text"/>
+  <xsl:choose>
+    <xsl:when test="starts-with($text, ' ')">
+      <xsl:call-template name="strip-leading-whitespace">
+        <xsl:with-param name="text" select="substring($text, 2)"/>
+      </xsl:call-template>
+    </xsl:when>
+    <xsl:when test="starts-with($text, $newline)">
+      <xsl:call-template name="strip-leading-whitespace">
+        <xsl:with-param name="text" select="substring($text, 2)"/>
+      </xsl:call-template>
+    </xsl:when>
+    <xsl:otherwise>
+      <xsl:value-of select="$text"/>
+    </xsl:otherwise>
+  </xsl:choose>
+</xsl:template>
+
+
+<xsl:template name="escape-text">
+  <xsl:param name="text"/>
+  <xsl:choose>
+    <xsl:when test="contains($text, '_')">
+      <xsl:value-of select="substring-before($text, '_')"/>
+      <xsl:text>\_</xsl:text>
+      <xsl:call-template name="escape-text">
+        <xsl:with-param name="text" select="substring-after($text, '_')"/>
+      </xsl:call-template>
+    </xsl:when>
+    <xsl:otherwise>
+      <xsl:value-of select="$text"/>
+    </xsl:otherwise>
+  </xsl:choose>
+</xsl:template>
+
+
+<xsl:template match="ref[@kindref='compound']" mode="markup">
+  <xsl:variable name="name">
+    <xsl:value-of select="."/>
+  </xsl:variable>
+  <xsl:choose>
+    <xsl:when test="contains(@refid, 'asio') or contains($name, 'asio::')">
+      <xsl:variable name="dox-ref-id" select="@refid"/>
+      <xsl:variable name="ref-name">
+        <xsl:call-template name="strip-asio-ns">
+          <xsl:with-param name="name"
+ select="(/doxygen//compounddef[@id=$dox-ref-id])[1]/compoundname"/>
+        </xsl:call-template>
+      </xsl:variable>
+      <xsl:variable name="ref-id">
+        <xsl:call-template name="make-id">
+          <xsl:with-param name="name" select="$ref-name"/>
+        </xsl:call-template>
+      </xsl:variable>
+      <xsl:text>[link boost_asio.reference.</xsl:text>
+      <xsl:value-of select="$ref-id"/>
+      <xsl:text> `</xsl:text>
+      <xsl:value-of name="text" select="$ref-name"/>
+      <xsl:text>`]</xsl:text>
+    </xsl:when>
+    <xsl:otherwise>
+      <xsl:text>`</xsl:text>
+      <xsl:value-of select="."/>
+      <xsl:text>`</xsl:text>
+    </xsl:otherwise>
+  </xsl:choose>
+</xsl:template>
+
+
+<xsl:template match="ref[@kindref='compound']" mode="markup-nested">
+  <xsl:variable name="name">
+    <xsl:value-of select="."/>
+  </xsl:variable>
+  <xsl:choose>
+    <xsl:when test="contains(@refid, 'asio') or contains($name, 'asio::')">
+      <xsl:variable name="dox-ref-id" select="@refid"/>
+      <xsl:variable name="ref-name">
+        <xsl:call-template name="strip-asio-ns">
+          <xsl:with-param name="name"
+ select="(/doxygen//compounddef[@id=$dox-ref-id])[1]/compoundname"/>
+        </xsl:call-template>
+      </xsl:variable>
+      <xsl:variable name="ref-id">
+        <xsl:call-template name="make-id">
+          <xsl:with-param name="name" select="$ref-name"/>
+        </xsl:call-template>
+      </xsl:variable>
+      <xsl:text>[link boost_asio.reference.</xsl:text>
+      <xsl:value-of select="$ref-id"/>
+      <xsl:text> `</xsl:text>
+      <xsl:value-of name="text" select="$ref-name"/>
+      <xsl:text>`]</xsl:text>
+    </xsl:when>
+    <xsl:otherwise>
+      <xsl:text>`</xsl:text>
+      <xsl:value-of select="."/>
+      <xsl:text>`</xsl:text>
+    </xsl:otherwise>
+  </xsl:choose>
+</xsl:template>
+
+
+<xsl:template match="ref[@kindref='member']" mode="markup">
+  <xsl:text>`</xsl:text>
+  <xsl:value-of select="."/>
+  <xsl:text>`</xsl:text>
+</xsl:template>
+
+
+<xsl:template match="ref[@kindref='member']" mode="markup-nested">
+  <xsl:text>`</xsl:text>
+  <xsl:value-of select="."/>
+  <xsl:text>`</xsl:text>
+</xsl:template>
+
+
+<xsl:template name="header-requirements">
+  <xsl:param name="file"/>
+  <xsl:value-of select="$newline"/>
+  <xsl:text>[heading Requirements]</xsl:text>
+  <xsl:value-of select="$newline"/>
+  <xsl:value-of select="$newline"/>
+  <xsl:text>[*Header: ]</xsl:text>
+  <xsl:text>[^boost/asio/</xsl:text>
+  <xsl:value-of select="substring-after($file, 'boost/asio/')"/>
+  <xsl:text>]</xsl:text>
+  <xsl:value-of select="$newline"/>
+  <xsl:value-of select="$newline"/>
+  <xsl:text>[*Convenience header: ]</xsl:text>
+  <xsl:choose>
+    <xsl:when test="contains($file, 'boost/asio/ssl')">
+      <xsl:text>[^boost/asio/ssl.hpp]</xsl:text>
+    </xsl:when>
+    <xsl:otherwise>
+      <xsl:text>[^boost/asio.hpp]</xsl:text>
+    </xsl:otherwise>
+  </xsl:choose>
+  <xsl:value-of select="$newline"/>
+</xsl:template>
+
+
+<!--========== Class ==========-->
+
+<xsl:template name="class">
+  <xsl:variable name="class-name">
+    <xsl:call-template name="strip-asio-ns">
+      <xsl:with-param name="name" select="compoundname"/>
+    </xsl:call-template>
+  </xsl:variable>
+  <xsl:variable name="unqualified-class-name">
+    <xsl:call-template name="strip-ns">
+      <xsl:with-param name="name" select="compoundname"/>
+    </xsl:call-template>
+  </xsl:variable>
+  <xsl:variable name="class-id">
+    <xsl:call-template name="make-id">
+      <xsl:with-param name="name" select="$class-name"/>
+    </xsl:call-template>
+  </xsl:variable>
+  <xsl:variable name="class-file" select="location/@file"/>
+[section:<xsl:value-of select="$class-id"/><xsl:text> </xsl:text><xsl:value-of select="$class-name"/>]
+
+<xsl:apply-templates select="briefdescription" mode="markup"/><xsl:text>
+
+</xsl:text>
+
+<xsl:apply-templates select="templateparamlist"
+ mode="class-detail"/><xsl:text> </xsl:text><xsl:value-of select="@kind"/><xsl:text> </xsl:text><xsl:value-of + select="$unqualified-class-name"/><xsl:if test="count(basecompoundref[not(contains(.,'::detail'))]) > 0"> :</xsl:if><xsl:text> +</xsl:text><xsl:for-each select="basecompoundref[not(contains(.,'::detail'))]"> +<xsl:text> </xsl:text><xsl:if test="@prot='public'">public </xsl:if><xsl:call-template + name="strip-asio-ns"><xsl:with-param name="name" select="."/></xsl:call-template><xsl:if
+ test="not(position() = last())">,</xsl:if><xsl:text>
+</xsl:text></xsl:for-each><xsl:text>
+</xsl:text>
+
+<xsl:call-template name="class-tables">
+  <xsl:with-param name="class-name" select="$class-name"/>
+  <xsl:with-param name="class-id" select="$class-id"/>
+</xsl:call-template>
+
+<xsl:apply-templates select="detaileddescription" mode="markup"/>
+
+<xsl:call-template name="header-requirements">
+  <xsl:with-param name="file" select="$class-file"/>
+</xsl:call-template>
+
+<xsl:call-template name="class-members">
+  <xsl:with-param name="class-name" select="$class-name"/>
+  <xsl:with-param name="class-id" select="$class-id"/>
+  <xsl:with-param name="class-file" select="$class-file"/>
+</xsl:call-template>
+
+[endsect]
+</xsl:template>
+
+
+<xsl:template name="class-tables">
+<xsl:param name="class-name"/>
+<xsl:param name="class-id"/>
+<xsl:if test="
+    count(
+      sectiondef[@kind='public-type'] |
+      innerclass[@prot='public' and not(contains(., '_handler'))]) &gt; 0">
+[heading Types]
+[table
+  [[Name][Description]]
+<xsl:for-each select="
+    sectiondef[@kind='public-type']/memberdef |
+ innerclass[@prot='public' and not(contains(., '_handler'))]" mode="class-table">
+  <xsl:sort select="concat(name, (.)[not(name)])"/>
+  [
+<xsl:choose>
+  <xsl:when test="count(name) &gt; 0">
+ [[link boost_asio.reference.<xsl:value-of select="$class-id"/>.<xsl:value-of select="name"/>
+      <xsl:text> </xsl:text>[*<xsl:value-of select="name"/>]]]
+    [<xsl:value-of select="briefdescription"/>]
+  </xsl:when>
+  <xsl:otherwise>
+    <xsl:variable name="type-name">
+      <xsl:call-template name="strip-asio-ns">
+        <xsl:with-param name="name" select="."/>
+      </xsl:call-template>
+    </xsl:variable>
+    <xsl:variable name="unqualified-type-name">
+      <xsl:call-template name="strip-ns">
+        <xsl:with-param name="name" select="."/>
+      </xsl:call-template>
+    </xsl:variable>
+    <xsl:variable name="type-id">
+      <xsl:call-template name="make-id">
+        <xsl:with-param name="name" select="$type-name"/>
+      </xsl:call-template>
+    </xsl:variable>
+    <xsl:variable name="type-ref-id" select="@refid"/>
+    [[link boost_asio.reference.<xsl:value-of select="$type-id"/>
+ <xsl:text> </xsl:text>[*<xsl:value-of select="$unqualified-type-name"/>]]] + [<xsl:value-of select="(/doxygen//compounddef[@id=$type-ref-id])[1]/briefdescription"/>]
+  </xsl:otherwise>
+</xsl:choose>
+  ]
+</xsl:for-each>
+]
+</xsl:if>
+
+<xsl:if test="count(sectiondef[@kind='public-func' or @kind='public-static-func']) > 0">
+[heading Member Functions]
+[table
+  [[Name][Description]]
+<xsl:for-each select="sectiondef[@kind='public-func' or @kind='public-static-func']/memberdef" mode="class-table">
+  <xsl:sort select="name"/>
+  <xsl:variable name="name">
+    <xsl:value-of select="name"/>
+  </xsl:variable>
+  <xsl:variable name="id">
+    <xsl:call-template name="make-id">
+      <xsl:with-param name="name" select="$name"/>
+    </xsl:call-template>
+  </xsl:variable>
+  <xsl:variable name="doxygen-id">
+    <xsl:value-of select="@id"/>
+  </xsl:variable>
+  <xsl:variable name="overload-count">
+    <xsl:value-of select="count(../memberdef[name = $name])"/>
+  </xsl:variable>
+  <xsl:variable name="overload-position">
+    <xsl:for-each select="../memberdef[name = $name]">
+      <xsl:if test="@id = $doxygen-id">
+        <xsl:value-of select="position()"/>
+      </xsl:if>
+    </xsl:for-each>
+  </xsl:variable>
+  <xsl:if test="$overload-position = 1">
+  [
+ [[link boost_asio.reference.<xsl:value-of select="$class-id"/>.<xsl:value-of select="$id"/>
+      <xsl:text> </xsl:text>[*<xsl:value-of select="$name"/><xsl:text>]]]
+    [</xsl:text><xsl:value-of select="briefdescription"/>
+  </xsl:if>
+ <xsl:if test="not($overload-position = 1) and not(briefdescription = preceding-sibling::*/briefdescription)">
+    <xsl:value-of select="$newline"/>
+    <xsl:value-of select="$newline"/>
+    <xsl:text>     </xsl:text>
+    <xsl:value-of select="briefdescription"/>
+  </xsl:if>
+  <xsl:if test="$overload-position = $overload-count">
+  <xsl:text>]
+  ]
+  </xsl:text>
+  </xsl:if>
+</xsl:for-each>
+]
+</xsl:if>
+
+<xsl:if test="count(sectiondef[@kind='protected-func' or @kind='protected-static-func']) > 0">
+[heading Protected Member Functions]
+[table
+  [[Name][Description]]
+<xsl:for-each select="sectiondef[@kind='protected-func' or @kind='protected-static-func']/memberdef" mode="class-table">
+  <xsl:sort select="name"/>
+  <xsl:variable name="name">
+    <xsl:value-of select="name"/>
+  </xsl:variable>
+  <xsl:variable name="id">
+    <xsl:call-template name="make-id">
+      <xsl:with-param name="name" select="$name"/>
+    </xsl:call-template>
+  </xsl:variable>
+  <xsl:variable name="doxygen-id">
+    <xsl:value-of select="@id"/>
+  </xsl:variable>
+  <xsl:variable name="overload-count">
+    <xsl:value-of select="count(../memberdef[name = $name])"/>
+  </xsl:variable>
+  <xsl:variable name="overload-position">
+    <xsl:for-each select="../memberdef[name = $name]">
+      <xsl:if test="@id = $doxygen-id">
+        <xsl:value-of select="position()"/>
+      </xsl:if>
+    </xsl:for-each>
+  </xsl:variable>
+  <xsl:if test="$overload-position = 1">
+  [
+ [[link boost_asio.reference.<xsl:value-of select="$class-id"/>.<xsl:value-of select="$id"/>
+      <xsl:text> </xsl:text>[*<xsl:value-of select="$name"/><xsl:text>]]]
+    [</xsl:text><xsl:value-of select="briefdescription"/>
+  </xsl:if>
+ <xsl:if test="not($overload-position = 1) and not(briefdescription = preceding-sibling::*/briefdescription)">
+    <xsl:value-of select="$newline"/>
+    <xsl:value-of select="$newline"/>
+    <xsl:text>     </xsl:text>
+    <xsl:value-of select="briefdescription"/>
+  </xsl:if>
+  <xsl:if test="$overload-position = $overload-count">
+  <xsl:text>]
+  ]
+  </xsl:text>
+  </xsl:if>
+</xsl:for-each>
+]
+</xsl:if>
+
+<xsl:if test="count(sectiondef[@kind='public-attrib' or @kind='public-static-attrib']) > 0">
+[heading Data Members]
+[table
+  [[Name][Description]]
+<xsl:for-each select="sectiondef[@kind='public-attrib' or @kind='public-static-attrib']/memberdef" mode="class-table">
+  <xsl:sort select="name"/>
+  [
+ [[link boost_asio.reference.<xsl:value-of select="$class-id"/>.<xsl:value-of select="name"/>
+      <xsl:text> </xsl:text>[*<xsl:value-of select="name"/>]]]
+    [<xsl:value-of select="briefdescription"/>]
+  ]
+</xsl:for-each>
+]
+</xsl:if>
+
+<xsl:if test="count(sectiondef[@kind='protected-attrib' or @kind='protected-static-attrib']) > 0">
+[heading Protected Data Members]
+[table
+  [[Name][Description]]
+<xsl:for-each select="sectiondef[@kind='protected-attrib' or @kind='protected-static-attrib']/memberdef" mode="class-table">
+  <xsl:sort select="name"/>
+  [
+ [[link boost_asio.reference.<xsl:value-of select="$class-id"/>.<xsl:value-of select="name"/>
+      <xsl:text> </xsl:text>[*<xsl:value-of select="name"/>]]]
+    [<xsl:value-of select="briefdescription"/>]
+  ]
+</xsl:for-each>
+]
+</xsl:if>
+
+<xsl:if test="count(sectiondef[@kind='friend']/memberdef[not(type = 'friend class') and not(contains(name, '_helper'))]) &gt; 0">
+[heading Friends]
+[table
+  [[Name][Description]]
+<xsl:for-each select="sectiondef[@kind='friend']/memberdef[not(type = 'friend class') and not(contains(name, '_helper'))]" mode="class-table">
+  <xsl:sort select="name"/>
+  <xsl:variable name="name">
+    <xsl:value-of select="name"/>
+  </xsl:variable>
+  <xsl:variable name="id">
+    <xsl:call-template name="make-id">
+      <xsl:with-param name="name" select="$name"/>
+    </xsl:call-template>
+  </xsl:variable>
+  <xsl:variable name="doxygen-id">
+    <xsl:value-of select="@id"/>
+  </xsl:variable>
+  <xsl:variable name="overload-count">
+    <xsl:value-of select="count(../memberdef[name = $name])"/>
+  </xsl:variable>
+  <xsl:variable name="overload-position">
+    <xsl:for-each select="../memberdef[name = $name]">
+      <xsl:if test="@id = $doxygen-id">
+        <xsl:value-of select="position()"/>
+      </xsl:if>
+    </xsl:for-each>
+  </xsl:variable>
+  <xsl:if test="$overload-position = 1">
+  [
+ [[link boost_asio.reference.<xsl:value-of select="$class-id"/>.<xsl:value-of select="$id"/>
+      <xsl:text> </xsl:text>[*<xsl:value-of select="$name"/><xsl:text>]]]
+    [</xsl:text><xsl:value-of select="briefdescription"/>
+  </xsl:if>
+ <xsl:if test="not($overload-position = 1) and not(briefdescription = preceding-sibling::*/briefdescription)">
+    <xsl:value-of select="$newline"/>
+    <xsl:value-of select="$newline"/>
+    <xsl:text>     </xsl:text>
+    <xsl:value-of select="briefdescription"/>
+  </xsl:if>
+  <xsl:if test="$overload-position = $overload-count">
+  <xsl:text>]
+  ]
+  </xsl:text>
+  </xsl:if>
+</xsl:for-each>
+]
+</xsl:if>
+
+<xsl:if test="count(sectiondef[@kind='related']/memberdef) &gt; 0">
+[heading Related Functions]
+[table
+  [[Name][Description]]
+<xsl:for-each select="sectiondef[@kind='related']/memberdef" mode="class-table">
+  <xsl:sort select="name"/>
+  <xsl:variable name="name">
+    <xsl:value-of select="name"/>
+  </xsl:variable>
+  <xsl:variable name="id">
+    <xsl:call-template name="make-id">
+      <xsl:with-param name="name" select="$name"/>
+    </xsl:call-template>
+  </xsl:variable>
+  <xsl:variable name="doxygen-id">
+    <xsl:value-of select="@id"/>
+  </xsl:variable>
+  <xsl:variable name="overload-count">
+    <xsl:value-of select="count(../memberdef[name = $name])"/>
+  </xsl:variable>
+  <xsl:variable name="overload-position">
+    <xsl:for-each select="../memberdef[name = $name]">
+      <xsl:if test="@id = $doxygen-id">
+        <xsl:value-of select="position()"/>
+      </xsl:if>
+    </xsl:for-each>
+  </xsl:variable>
+  <xsl:if test="$overload-position = 1">
+  [
+ [[link boost_asio.reference.<xsl:value-of select="$class-id"/>.<xsl:value-of select="$id"/>
+      <xsl:text> </xsl:text>[*<xsl:value-of select="$name"/><xsl:text>]]]
+    [</xsl:text><xsl:value-of select="briefdescription"/>
+  </xsl:if>
+ <xsl:if test="not($overload-position = 1) and not(briefdescription = preceding-sibling::*/briefdescription)">
+    <xsl:value-of select="$newline"/>
+    <xsl:value-of select="$newline"/>
+    <xsl:text>     </xsl:text>
+    <xsl:value-of select="briefdescription"/>
+  </xsl:if>
+  <xsl:if test="$overload-position = $overload-count">
+  <xsl:text>]
+  ]
+  </xsl:text>
+  </xsl:if>
+</xsl:for-each>
+]
+</xsl:if>
+
+</xsl:template>
+
+
+<xsl:template name="class-members">
+<xsl:param name="class-name"/>
+<xsl:param name="class-id"/>
+<xsl:param name="class-file"/>
+<xsl:apply-templates select="sectiondef[@kind='public-type' or @kind='public-func' or @kind='public-static-func' or @kind='public-attrib' or @kind='public-static-attrib' or @kind='protected-func' or @kind='protected-static-func' or @kind='protected-attrib' or @kind='protected-static-attrib' or @kind='friend' or @kind='related']/memberdef[not(type = 'friend class') and not(contains(name, '_helper'))]" mode="class-detail">
+  <xsl:sort select="name"/>
+  <xsl:with-param name="class-name" select="$class-name"/>
+  <xsl:with-param name="class-id" select="$class-id"/>
+  <xsl:with-param name="class-file" select="$class-file"/>
+</xsl:apply-templates>
+</xsl:template>
+
+
+<!-- Class detail -->
+
+<xsl:template match="memberdef" mode="class-detail">
+  <xsl:param name="class-name"/>
+  <xsl:param name="class-id"/>
+  <xsl:param name="class-file"/>
+  <xsl:variable name="name">
+    <xsl:value-of select="name"/>
+  </xsl:variable>
+  <xsl:variable name="id">
+    <xsl:call-template name="make-id">
+      <xsl:with-param name="name" select="$name"/>
+    </xsl:call-template>
+  </xsl:variable>
+  <xsl:variable name="doxygen-id">
+    <xsl:value-of select="@id"/>
+  </xsl:variable>
+  <xsl:variable name="overload-count">
+    <xsl:value-of select="count(../memberdef[name = $name])"/>
+  </xsl:variable>
+  <xsl:variable name="overload-position">
+    <xsl:for-each select="../memberdef[name = $name]">
+      <xsl:if test="@id = $doxygen-id">
+        <xsl:value-of select="position()"/>
+      </xsl:if>
+    </xsl:for-each>
+  </xsl:variable>
+
+<xsl:if test="$overload-count &gt; 1 and $overload-position = 1">
+[section:<xsl:value-of select="$id"/><xsl:text> </xsl:text>
+<xsl:value-of select="$class-name"/>::<xsl:value-of select="$name"/>]
+
+<xsl:text>[indexterm2 </xsl:text>
+<xsl:value-of select="$name"/>
+<xsl:text>..</xsl:text>
+<xsl:value-of select="$class-name"/>
+<xsl:text>] </xsl:text>
+
+<xsl:apply-templates select="briefdescription" mode="markup"/><xsl:text>
+</xsl:text>
+
+<xsl:for-each select="../memberdef[name = $name]">
+<xsl:if test="position() &gt; 1 and not(briefdescription = preceding-sibling::*/briefdescription)">
+  <xsl:value-of select="$newline"/>
+  <xsl:apply-templates select="briefdescription" mode="markup"/>
+  <xsl:value-of select="$newline"/>
+</xsl:if>
+<xsl:text>
+</xsl:text><xsl:apply-templates select="templateparamlist" mode="class-detail"/>
+<xsl:text>  </xsl:text>
+ <xsl:if test="@explicit='yes'">explicit </xsl:if>
+ <xsl:if test="@static='yes'">static </xsl:if>
+ <xsl:if test="string-length(type) > 0">
+ <xsl:value-of select="type"/><xsl:text> </xsl:text>
+</xsl:if>``[link boost_asio.reference.<xsl:value-of select="$class-id"/>.<xsl:value-of + select="$id"/>.overload<xsl:value-of select="position()"/><xsl:text> </xsl:text><xsl:value-of
+ select="name"/>]``(<xsl:apply-templates select="param"
+ mode="class-detail"/>)<xsl:if test="@const='yes'"> const</xsl:if>;
+<xsl:text>  ``  [''''&amp;raquo;'''</xsl:text>
+<xsl:text> [link boost_asio.reference.</xsl:text>
***The diff for this file has been truncated for email.***
=======================================
--- /dev/null
+++ /trunk/libs/asio/doc/requirements/AcceptHandler.qbk Sun Feb 7 18:57:55 2010
@@ -0,0 +1,50 @@
+[/
+ / Copyright (c) 2003-2010 Christopher M. Kohlhoff (chris at kohlhoff dot com)
+ /
+ / 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)
+ /]
+
+[section:AcceptHandler Accept handler requirements]
+
+An accept handler must meet the requirements for a [link
+boost_asio.reference.Handler handler]. A value `h` of an accept handler
+class should work correctly in the expression `h(ec)`, where `ec` is an lvalue
+of type `const error_code`.
+
+[heading Examples]
+
+A free function as an accept handler:
+
+  void accept_handler(
+      const boost::system::error_code& ec)
+  {
+    ...
+  }
+
+An accept handler function object:
+
+  struct accept_handler
+  {
+    ...
+    void operator()(
+        const boost::system::error_code& ec)
+    {
+      ...
+    }
+    ...
+  };
+
+A non-static class member function adapted to an accept handler using `bind()`:
+
+  void my_class::accept_handler(
+      const boost::system::error_code& ec)
+  {
+    ...
+  }
+  ...
+  acceptor.async_accept(...,
+      boost::bind(&my_class::accept_handler,
+        this, boost::asio::placeholders::error));
+
+[endsect]
=======================================
--- /dev/null
+++ /trunk/libs/asio/doc/requirements/AsyncRandomAccessReadDevice.qbk Sun Feb 7 18:57:55 2010
@@ -0,0 +1,57 @@
+[/
+ / Copyright (c) 2003-2010 Christopher M. Kohlhoff (chris at kohlhoff dot com)
+ /
+ / 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)
+ /]
+
+[section:AsyncRandomAccessReadDevice Buffer-oriented asynchronous random-access
+read device requirements]
+
+In the table below, `a` denotes an asynchronous random access read device
+object, `o` denotes an offset of type `boost::uint64_t`, `mb` denotes an object +satisfying [link boost_asio.reference.MutableBufferSequence mutable buffer sequence]
+requirements, and `h` denotes an object satisfying [link
+boost_asio.reference.ReadHandler read handler] requirements.
+
+[table Buffer-oriented asynchronous random-access read device requirements
+  [[operation] [type] [semantics, pre/post-conditions]]
+  [
+    [`a.get_io_service();`]
+    [`io_service&`]
+    [Returns the `io_service` object through which the `async_read_some_at`
+    handler `h` will be invoked.]
+  ]
+  [
+    [`a.async_read_some_at(o, mb, h);`]
+    [`void`]
+    [
+      Initiates an asynchronous operation to read one or more bytes of data
+ from the device `a` at the offset `o`. The operation is performed via the + `io_service` object `a.get_io_service()` and behaves according to [link
+      boost_asio.reference.asynchronous_operations asynchronous operation]
+      requirements.\n
+      \n
+ The mutable buffer sequence `mb` specifies memory where the data should + be placed. The `async_read_some_at` operation shall always fill a buffer
+      in the sequence completely before proceeding to the next.\n
+      \n
+ The implementation shall maintain one or more copies of `mb` until such
+      time as the read operation no longer requires access to the memory
+      specified by the buffers in the sequence. The program must ensure the
+      memory is valid until:\n
+      \n
+      [mdash] the last copy of `mb` is destroyed, or\n
+      \n
+      [mdash] the handler for the asynchronous read operation is invoked,\n
+      \n
+      whichever comes first.\n
+      \n
+      If the total size of all buffers in the sequence `mb` is `0`, the
+ asynchronous read operation shall complete immediately and pass `0` as
+      the argument to the handler that specifies the number of bytes read.
+    ]
+  ]
+]
+
+[endsect]
=======================================
--- /dev/null
+++ /trunk/libs/asio/doc/requirements/AsyncRandomAccessWriteDevice.qbk Sun Feb 7 18:57:55 2010
@@ -0,0 +1,58 @@
+[/
+ / Copyright (c) 2003-2010 Christopher M. Kohlhoff (chris at kohlhoff dot com)
+ /
+ / 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)
+ /]
+
+[section:AsyncRandomAccessWriteDevice Buffer-oriented asynchronous
+random-access write device requirements]
+
+In the table below, `a` denotes an asynchronous write stream object, `o`
+denotes an offset of type `boost::uint64_t`, `cb` denotes an object satisfying
+[link boost_asio.reference.ConstBufferSequence constant buffer sequence]
+requirements, and `h` denotes an object satisfying [link
+boost_asio.reference.WriteHandler write handler] requirements.
+
+[table Buffer-oriented asynchronous random-access write device requirements
+  [[operation] [type] [semantics, pre/post-conditions]]
+  [
+    [`a.get_io_service();`]
+    [`io_service&`]
+ [Returns the `io_service` object through which the `async_write_some_at`
+    handler `h` will be invoked.]
+  ]
+  [
+    [`a.async_write_some_at(o, cb, h);`]
+    [`void`]
+    [
+ Initiates an asynchronous operation to write one or more bytes of data to
+      the device `a` at offset `o`. The operation is performed via the
+ `io_service` object `a.get_io_service()` and behaves according to [link
+      boost_asio.reference.asynchronous_operations asynchronous operation]
+      requirements.\n
+      \n
+ The constant buffer sequence `cb` specifies memory where the data to be
+      written is located. The `async_write_some_at` operation shall always
+      write a buffer in the sequence completely before proceeding to the
+      next.\n
+      \n
+ The implementation shall maintain one or more copies of `cb` until such
+      time as the write operation no longer requires access to the memory
+      specified by the buffers in the sequence. The program must ensure the
+      memory is valid until:\n
+      \n
+      [mdash] the last copy of `cb` is destroyed, or\n
+      \n
+ [mdash] the handler for the asynchronous write operation is invoked,\n
+      \n
+      whichever comes first.\n
+      \n
+      If the total size of all buffers in the sequence `cb` is `0`, the
+ asynchronous write operation shall complete immediately and pass `0` as + the argument to the handler that specifies the number of bytes written.
+    ]
+  ]
+]
+
+[endsect]
=======================================
--- /dev/null
+++ /trunk/libs/asio/doc/requirements/AsyncReadStream.qbk Sun Feb 7 18:57:55 2010
@@ -0,0 +1,56 @@
+[/
+ / Copyright (c) 2003-2010 Christopher M. Kohlhoff (chris at kohlhoff dot com)
+ /
+ / 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)
+ /]
+
+[section:AsyncReadStream Buffer-oriented asynchronous read stream requirements]
+
+In the table below, `a` denotes an asynchronous read stream object, `mb`
+denotes an object satisfying [link
+boost_asio.reference.MutableBufferSequence mutable buffer sequence]
+requirements, and `h` denotes an object satisfying [link
+boost_asio.reference.ReadHandler read handler] requirements.
+
+[table Buffer-oriented asynchronous read stream requirements
+  [[operation] [type] [semantics, pre/post-conditions]]
+  [
+    [`a.io_service();`]
+    [`io_service&`]
+    [Returns the `io_service` object through which the `async_read_some`
+    handler `h` will be invoked.]
+  ]
+  [
+    [`a.async_read_some(mb, h);`]
+    [`void`]
+    [
+      Initiates an asynchronous operation to read one or more bytes of data
+      from the stream `a`. The operation is performed via the `io_service`
+      object `a.io_service()` and behaves according to [link
+      boost_asio.reference.asynchronous_operations asynchronous operation]
+      requirements.\n
+      \n
+ The mutable buffer sequence `mb` specifies memory where the data should + be placed. The `async_read_some` operation shall always fill a buffer in
+      the sequence completely before proceeding to the next.\n
+      \n
+ The implementation shall maintain one or more copies of `mb` until such
+      time as the read operation no longer requires access to the memory
+      specified by the buffers in the sequence. The program must ensure the
+      memory is valid until:\n
+      \n
+      [mdash] the last copy of `mb` is destroyed, or\n
+      \n
+      [mdash] the handler for the asynchronous read operation is invoked,\n
+      \n
+      whichever comes first.\n
+      \n
+      If the total size of all buffers in the sequence `mb` is `0`, the
+ asynchronous read operation shall complete immediately and pass `0` as
+      the argument to the handler that specifies the number of bytes read.
+    ]
+  ]
+]
+
+[endsect]
=======================================
--- /dev/null
+++ /trunk/libs/asio/doc/requirements/AsyncWriteStream.qbk Sun Feb 7 18:57:55 2010
@@ -0,0 +1,55 @@
+[/
+ / Copyright (c) 2003-2010 Christopher M. Kohlhoff (chris at kohlhoff dot com)
+ /
+ / 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)
+ /]
+
+[section:AsyncWriteStream Buffer-oriented asynchronous write stream requirements]
+
+In the table below, `a` denotes an asynchronous write stream object, `cb`
+denotes an object satisfying [link boost_asio.reference.ConstBufferSequence
+constant buffer sequence] requirements, and `h` denotes an object satisfying
+[link boost_asio.reference.WriteHandler write handler] requirements.
+
+[table Buffer-oriented asynchronous write stream requirements
+  [[operation] [type] [semantics, pre/post-conditions]]
+  [
+    [`a.io_service();`]
+    [`io_service&`]
+    [Returns the `io_service` object through which the `async_write_some`
+    handler `h` will be invoked.]
+  ]
+  [
+    [`a.async_write_some(cb, h);`]
+    [`void`]
+    [
+ Initiates an asynchronous operation to write one or more bytes of data to + the stream `a`. The operation is performed via the `io_service` object
+      `a.io_service()` and behaves according to [link
+      boost_asio.reference.asynchronous_operations asynchronous operation]
+      requirements.\n
+      \n
+ The constant buffer sequence `cb` specifies memory where the data to be + written is located. The `async_write_some` operation shall always write a
+      buffer in the sequence completely before proceeding to the next.\n
+      \n
+ The implementation shall maintain one or more copies of `cb` until such
+      time as the write operation no longer requires access to the memory
+      specified by the buffers in the sequence. The program must ensure the
+      memory is valid until:\n
+      \n
+      [mdash] the last copy of `cb` is destroyed, or\n
+      \n
+ [mdash] the handler for the asynchronous write operation is invoked,\n
+      \n
+      whichever comes first.\n
+      \n
+      If the total size of all buffers in the sequence `cb` is `0`, the
+ asynchronous write operation shall complete immediately and pass `0` as + the argument to the handler that specifies the number of bytes written.
+    ]
+  ]
+]
+
+[endsect]
=======================================
--- /dev/null
+++ /trunk/libs/asio/doc/requirements/CompletionHandler.qbk Sun Feb 7 18:57:55 2010
@@ -0,0 +1,45 @@
+[/
+ / Copyright (c) 2003-2010 Christopher M. Kohlhoff (chris at kohlhoff dot com)
+ /
+ / 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)
+ /]
+
+[section:CompletionHandler Completion handler requirements]
+
+A completion handler must meet the requirements for a [link
+boost_asio.reference.Handler handler]. A value `h` of a completion handler
+class should work correctly in the expression `h()`.
+
+[heading Examples]
+
+A free function as a completion handler:
+
+  void completion_handler()
+  {
+    ...
+  }
+
+A completion handler function object:
+
+  struct completion_handler
+  {
+    ...
+    void operator()()
+    {
+      ...
+    }
+    ...
+  };
+
+A non-static class member function adapted to a completion handler using
+`bind()`:
+
+  void my_class::completion_handler()
+  {
+    ...
+  }
+  ...
+  my_io_service.post(boost::bind(&my_class::completion_handler, this));
+
+[endsect]
=======================================
--- /dev/null
+++ /trunk/libs/asio/doc/requirements/ConnectHandler.qbk Sun Feb 7 18:57:55 2010
@@ -0,0 +1,50 @@
+[/
+ / Copyright (c) 2003-2010 Christopher M. Kohlhoff (chris at kohlhoff dot com)
+ /
+ / 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)
+ /]
+
+[section:ConnectHandler Connect handler requirements]
+
+A connect handler must meet the requirements for a [link
+boost_asio.reference.Handler handler]. A value `h` of a connect handler
+class should work correctly in the expression `h(ec)`, where `ec` is an lvalue
+of type `const error_code`.
+
+[heading Examples]
+
+A free function as a connect handler:
+
+  void connect_handler(
+      const boost::system::error_code& ec)
+  {
+    ...
+  }
+
+A connect handler function object:
+
+  struct connect_handler
+  {
+    ...
+    void operator()(
+        const boost::system::error_code& ec)
+    {
+      ...
+    }
+    ...
+  };
+
+A non-static class member function adapted to a connect handler using `bind()`:
+
+  void my_class::connect_handler(
+      const boost::system::error_code& ec)
+  {
+    ...
+  }
+  ...
+  socket.async_connect(...,
+      boost::bind(&my_class::connect_handler,
+        this, boost::asio::placeholders::error));
+
+[endsect]
=======================================
--- /dev/null
+++ /trunk/libs/asio/doc/requirements/ConstBufferSequence.qbk Sun Feb 7 18:57:55 2010
@@ -0,0 +1,102 @@
+[/
+ / Copyright (c) 2003-2010 Christopher M. Kohlhoff (chris at kohlhoff dot com)
+ /
+ / 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)
+ /]
+
+[section:ConstBufferSequence Constant buffer sequence requirements]
+
+In the table below, `X` denotes a class containing objects of type `T`, `a`
+denotes a value of type `X` and `u` denotes an identifier.
+
+[table ConstBufferSequence requirements
+  [[expression] [return type] [assertion/note\npre/post-condition]]
+  [
+    [`X::value_type`]
+    [`T`]
+    [`T` meets the requirements for [link
+     boost_asio.reference.ConvertibleToConstBuffer
+     ConvertibleToConstBuffer].]
+  ]
+  [
+    [`X::const_iterator`]
+    [iterator type pointing to `T`]
+    [`const_iterator` meets the requirements for bidirectional iterators
+     (C++ Std, 24.1.4).]
+  ]
+  [
+    [`X(a);`]
+    []
+    [post: `equal_const_buffer_seq(a, X(a))` where the binary predicate
+     `equal_const_buffer_seq` is defined as
+     ``
+       bool equal_const_buffer_seq(
+         const X& x1, const X& x2)
+       {
+         return
+           distance(x1.begin(), x1.end())
+             == distance(x2.begin(), x2.end())
+               && equal(x1.begin(), x1.end(),
+                        x2.begin(), equal_buffer);
+       }
+     ``
+     and the binary predicate `equal_buffer` is defined as
+     ``
+      bool equal_buffer(
+        const X::value_type& v1,
+        const X::value_type& v2)
+      {
+        const_buffer b1(v1);
+        const_buffer b2(v2);
+        return
+          buffer_cast<const void*>(b1)
+            == buffer_cast<const void*>(b2)
+              && buffer_size(b1) == buffer_size(b2);
+      }
+     ``]
+  ]
+  [
+    [`X u(a);`]
+    []
+    [post:
+     ``
+      distance(a.begin(), a.end())
+        == distance(u.begin(), u.end())
+          && equal(a.begin(), a.end(),
+                   u.begin(), equal_buffer)
+     ``
+     where the binary predicate `equal_buffer` is defined as
+     ``
+      bool equal_buffer(
+        const X::value_type& v1,
+        const X::value_type& v2)
+      {
+        const_buffer b1(v1);
+        const_buffer b2(v2);
+        return
+          buffer_cast<const void*>(b1)
+            == buffer_cast<const void*>(b2)
+              && buffer_size(b1) == buffer_size(b2);
+      }
+     ``]
+  ]
+  [
+    [`(&a)->~X();`]
+    [`void`]
+ [note: the destructor is applied to every element of `a`; all the memory
+     is deallocated.]
+  ]
+  [
+    [`a.begin();`]
+    [`const_iterator` or convertible to `const_iterator`]
+    []
+  ]
+  [
+    [`a.end();`]
+    [`const_iterator` or convertible to `const_iterator`]
+    []
+  ]
+]
+
+[endsect]
=======================================
--- /dev/null
+++ /trunk/libs/asio/doc/requirements/ConvertibleToConstBuffer.qbk Sun Feb 7 18:57:55 2010
@@ -0,0 +1,96 @@
+[/
+ / Copyright (c) 2003-2010 Christopher M. Kohlhoff (chris at kohlhoff dot com)
+ /
+ / 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)
+ /]
+
+[section:ConvertibleToConstBuffer Convertible to const buffer requirements]
+
+A type that meets the requirements for convertibility to a const buffer must +meet the requirements of `CopyConstructible` types (C++ Std, 20.1.3), and the
+requirements of `Assignable` types (C++ Std, 23.1).
+
+In the table below, `X` denotes a class meeting the requirements for
+convertibility to a const buffer, `a` and `b` denote values of type `X`, and
+`u`, `v` and `w` denote identifiers.
+
+[table ConvertibleToConstBuffer requirements
+  [[expression][postcondition]]
+  [
+    [``
+      const_buffer u(a);
+      const_buffer v(a);
+    ``]
+    [``
+      buffer_cast<const void*>(u) == buffer_cast<const void*>(v)
+        && buffer_size(u) == buffer_size(v)
+    ``]
+  ]
+  [
+    [``
+      const_buffer u(a);
+      const_buffer v = a;
+    ``]
+    [``
+      buffer_cast<const void*>(u) == buffer_cast<const void*>(v)
+        && buffer_size(u) == buffer_size(v)
+    ``]
+  ]
+  [
+    [``
+      const_buffer u(a);
+      const_buffer v; v = a;
+    ``]
+    [``
+      buffer_cast<const void*>(u) == buffer_cast<const void*>(v)
+        && buffer_size(u) == buffer_size(v)
+    ``]
+  ]
+  [
+    [``
+      const_buffer u(a);
+      const X& v = a;
+      const_buffer w(v);
+    ``]
+    [``
+      buffer_cast<const void*>(u) == buffer_cast<const void*>(w)
+        && buffer_size(u) == buffer_size(w)
+    ``]
+  ]
+  [
+    [``
+      const_buffer u(a);
+      X v(a);
+      const_buffer w(v);
+    ``]
+    [``
+      buffer_cast<const void*>(u) == buffer_cast<const void*>(w)
+        && buffer_size(u) == buffer_size(w)
+    ``]
+  ]
+  [
+    [``
+      const_buffer u(a);
+      X v = a;
+      const_buffer w(v);
+    ``]
+    [``
+      buffer_cast<const void*>(u) == buffer_cast<const void*>(w)
+        && buffer_size(u) == buffer_size(w)
+    ``]
+  ]
+  [
+    [``
+      const_buffer u(a);
+      X v(b); v = a;
+      const_buffer w(v);
+    ``]
+    [``
+      buffer_cast<const void*>(u) == buffer_cast<const void*>(w)
+        && buffer_size(u) == buffer_size(w)
+    ``]
+  ]
+]
+
+[endsect]
=======================================
--- /dev/null
+++ /trunk/libs/asio/doc/requirements/ConvertibleToMutableBuffer.qbk Sun Feb 7 18:57:55 2010
@@ -0,0 +1,96 @@
+[/
+ / Copyright (c) 2003-2010 Christopher M. Kohlhoff (chris at kohlhoff dot com)
+ /
+ / 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)
+ /]
+
+[section:ConvertibleToMutableBuffer Convertible to mutable buffer requirements]
+
+A type that meets the requirements for convertibility to a mutable buffer must +meet the requirements of `CopyConstructible` types (C++ Std, 20.1.3), and the
+requirements of `Assignable` types (C++ Std, 23.1).
+
+In the table below, `X` denotes a class meeting the requirements for
+convertibility to a mutable buffer, `a` and `b` denote values of type `X`, and
+`u`, `v` and `w` denote identifiers.
+
+[table ConvertibleToMutableBuffer requirements
+  [[expression][postcondition]]
+  [
+    [``
+      mutable_buffer u(a);
+      mutable_buffer v(a);
+    ``]
+    [``
+      buffer_cast<void*>(u) == buffer_cast<void*>(v)
+        && buffer_size(u) == buffer_size(v)
+    ``]
+  ]
+  [
+    [``
+      mutable_buffer u(a);
+      mutable_buffer v = a;
+    ``]
+    [``
+      buffer_cast<void*>(u) == buffer_cast<void*>(v)
+        && buffer_size(u) == buffer_size(v)
+    ``]
+  ]
+  [
+    [``
+      mutable_buffer u(a);
+      mutable_buffer v; v = a;
+    ``]
+    [``
+      buffer_cast<void*>(u) == buffer_cast<void*>(v)
+        && buffer_size(u) == buffer_size(v)
+    ``]
+  ]
+  [
+    [``
+      mutable_buffer u(a);
+      const X& v = a;
+      mutable_buffer w(v);
+    ``]
+    [``
+      buffer_cast<void*>(u) == buffer_cast<void*>(w)
+        && buffer_size(u) == buffer_size(w)
+    ``]
+  ]
+  [
+    [``
+      mutable_buffer u(a);
+      X v(a);
+      mutable_buffer w(v);
+    ``]
+    [``
+      buffer_cast<void*>(u) == buffer_cast<void*>(w)
+        && buffer_size(u) == buffer_size(w)
+    ``]
+  ]
+  [
+    [``
+      mutable_buffer u(a);
+      X v = a;
+      mutable_buffer w(v);
+    ``]
+    [``
+      buffer_cast<void*>(u) == buffer_cast<void*>(w)
+        && buffer_size(u) == buffer_size(w)
+    ``]
+  ]
+  [
+    [``
+      mutable_buffer u(a);
+      X v(b); v = a;
+      mutable_buffer w(v);
+    ``]
+    [``
+      buffer_cast<void*>(u) == buffer_cast<void*>(w)
+        && buffer_size(u) == buffer_size(w)
+    ``]
+  ]
+]
+
+[endsect]
=======================================
--- /dev/null
+++ /trunk/libs/asio/doc/requirements/DatagramSocketService.qbk Sun Feb 7 18:57:55 2010
@@ -0,0 +1,227 @@
+[/
+ / Copyright (c) 2003-2010 Christopher M. Kohlhoff (chris at kohlhoff dot com)
+ /
+ / 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)
+ /]
+
+[section:DatagramSocketService Datagram socket service requirements]
+
+A datagram socket service must meet the requirements for a [link
+boost_asio.reference.SocketService socket service], as well as the
+additional requirements listed below.
+
+In the table below, `X` denotes a datagram socket service class for protocol +[link boost_asio.reference.Protocol `Protocol`], `a` denotes a value of type +`X`, `b` denotes a value of type `X::implementation_type`, `e` denotes a value +of type `Protocol::endpoint`, `ec` denotes a value of type `error_code`, `f`
+denotes a value of type `socket_base::message_flags`, `mb` denotes a value
+satisfying [link boost_asio.reference.MutableBufferSequence mutable buffer
+sequence] requirements, `rh` denotes a value meeting [link
+boost_asio.reference.ReadHandler `ReadHandler`] requirements, `cb` denotes a
+value satisfying [link boost_asio.reference.ConstBufferSequence constant
+buffer sequence] requirements, and `wh` denotes a value meeting [link
+boost_asio.reference.WriteHandler `WriteHandler`] requirements.
+
+[table DatagramSocketService requirements
+  [[expression] [return type] [assertion/note\npre/post-condition]]
+  [
+    [`a.receive(b, mb, f, ec);`]
+    [`size_t`]
+    [
+      pre: `a.is_open(b)`.\n
+      \n
+      Reads one or more bytes of data from a connected socket `b`.\n
+      \n
+ The mutable buffer sequence `mb` specifies memory where the data should
+      be placed. The operation shall always fill a buffer in the sequence
+      completely before proceeding to the next.\n
+      \n
+ If successful, returns the number of bytes read. Otherwise returns `0`.
+    ]
+  ]
+  [
+    [`a.async_receive(b, mb, f, rh);`]
+    [`void`]
+    [
+      pre: `a.is_open(b)`.\n
+      \n
+      Initiates an asynchronous operation to read one or more bytes of data
+      from a connected socket `b`. The operation is performed via the
+      `io_service` object `a.io_service()` and behaves according to [link
+      boost_asio.reference.asynchronous_operations asynchronous operation]
+      requirements.\n
+      \n
+ The mutable buffer sequence `mb` specifies memory where the data should
+      be placed. The operation shall always fill a buffer in the sequence
+      completely before proceeding to the next.\n
+      \n
+ The implementation shall maintain one or more copies of `mb` until such
+      time as the read operation no longer requires access to the memory
+      specified by the buffers in the sequence. The program must ensure the
+      memory is valid until:\n
+      \n
+      [mdash] the last copy of `mb` is destroyed, or\n
+      \n
+      [mdash] the handler for the asynchronous operation is invoked,\n
+      \n
+      whichever comes first.\n
+      \n
+      If the operation completes successfully, the `ReadHandler` object
+      `rh` is invoked with the number of bytes transferred. Otherwise it is
+      invoked with `0`.
+    ]
+  ]
+  [
+    [`a.receive_from(b, mb, e, f, ec);`]
+    [`size_t`]
+    [
+      pre: `a.is_open(b)`.\n
+      \n
+      Reads one or more bytes of data from an unconnected socket `b`.\n
+      \n
+ The mutable buffer sequence `mb` specifies memory where the data should
+      be placed. The operation shall always fill a buffer in the sequence
+      completely before proceeding to the next.\n
+      \n
+ If successful, returns the number of bytes read. Otherwise returns `0`.
+    ]
+  ]
+  [
+    [`a.async_receive_from(b, mb, e, f, rh);`]
+    [`void`]
+    [
+      pre: `a.is_open(b)`.\n
+      \n
+      Initiates an asynchronous operation to read one or more bytes of data
+      from an unconnected socket `b`. The operation is performed via the
+      `io_service` object `a.io_service()` and behaves according to [link
+      boost_asio.reference.asynchronous_operations asynchronous operation]
+      requirements.\n
+      \n
+ The mutable buffer sequence `mb` specifies memory where the data should
+      be placed. The operation shall always fill a buffer in the sequence
+      completely before proceeding to the next.\n
+      \n
+ The implementation shall maintain one or more copies of `mb` until such
+      time as the read operation no longer requires access to the memory
+      specified by the buffers in the sequence. The program must ensure the
+      memory is valid until:\n
+      \n
+      [mdash] the last copy of `mb` is destroyed, or\n
+      \n
+      [mdash] the handler for the asynchronous operation is invoked,\n
+      \n
+      whichever comes first.\n
+      \n
+      The program must ensure the object `e` is valid until the handler
+      for the asynchronous operation is invoked.\n
+      \n
+      If the operation completes successfully, the `ReadHandler` object
+      `rh` is invoked with the number of bytes transferred. Otherwise it is
+      invoked with `0`.
+    ]
+  ]
+  [
+    [`a.send(b, cb, f, ec);`]
+    [`size_t`]
+    [
+      pre: `a.is_open(b)`.\n
+      \n
+      Writes one or more bytes of data to a connected socket `b`.\n
+      \n
+ The constant buffer sequence `cb` specifies memory where the data to be
+      written is located. The operation shall always write a buffer in the
+      sequence completely before proceeding to the next.\n
+      \n
+ If successful, returns the number of bytes written. Otherwise returns `0`.
+    ]
+  ]
+  [
+    [`a.async_send(b, cb, f, wh);`]
+    [`void`]
+    [
+      pre: `a.is_open(b)`.\n
+      \n
+ Initiates an asynchronous operation to write one or more bytes of data to + a connected socket `b`. The operation is performed via the `io_service`
+      object `a.io_service()` and behaves according to [link
+      boost_asio.reference.asynchronous_operations asynchronous operation]
+      requirements.\n
+      \n
+ The constant buffer sequence `cb` specifies memory where the data to be
+      written is located. The operation shall always write a buffer in the
+      sequence completely before proceeding to the next.\n
+      \n
+ The implementation shall maintain one or more copies of `cb` until such
+      time as the write operation no longer requires access to the memory
+      specified by the buffers in the sequence. The program must ensure the
+      memory is valid until:\n
+      \n
+      [mdash] the last copy of `cb` is destroyed, or\n
+      \n
+      [mdash] the handler for the asynchronous operation is invoked,\n
+      \n
+      whichever comes first.\n
+      \n
+ If the operation completes successfully, the `WriteHandler` object `wh` + is invoked with the number of bytes transferred. Otherwise it is invoked
+      with `0`.
+    ]
+  ]
+  [
+    [``
+      const typename Protocol::endpoint& u = e;
+      a.send_to(b, cb, u, f, ec);
+    ``]
+    [`size_t`]
+    [
+      pre: `a.is_open(b)`.\n
+      \n
+      Writes one or more bytes of data to an unconnected socket `b`.\n
+      \n
+ The constant buffer sequence `cb` specifies memory where the data to be
+      written is located. The operation shall always write a buffer in the
+      sequence completely before proceeding to the next.\n
+      \n
+ If successful, returns the number of bytes written. Otherwise returns `0`.
+    ]
+  ]
+  [
+    [``
+      const typename Protocol::endpoint& u = e;
+      a.async_send(b, cb, u, f, wh);
+    ``]
+    [`void`]
+    [
+      pre: `a.is_open(b)`.\n
+      \n
+ Initiates an asynchronous operation to write one or more bytes of data to + an unconnected socket `b`. The operation is performed via the `io_service`
+      object `a.io_service()` and behaves according to [link
+      boost_asio.reference.asynchronous_operations asynchronous operation]
+      requirements.\n
+      \n
+ The constant buffer sequence `cb` specifies memory where the data to be
+      written is located. The operation shall always write a buffer in the
+      sequence completely before proceeding to the next.\n
+      \n
+ The implementation shall maintain one or more copies of `cb` until such
+      time as the write operation no longer requires access to the memory
+      specified by the buffers in the sequence. The program must ensure the
+      memory is valid until:\n
+      \n
+      [mdash] the last copy of `cb` is destroyed, or\n
+      \n
+      [mdash] the handler for the asynchronous operation is invoked,\n
+      \n
+      whichever comes first.\n
+      \n
+ If the operation completes successfully, the `WriteHandler` object `wh` + is invoked with the number of bytes transferred. Otherwise it is invoked
+      with `0`.
+    ]
+  ]
+]
+
+[endsect]
=======================================
--- /dev/null
+++ /trunk/libs/asio/doc/requirements/DescriptorService.qbk Sun Feb 7 18:57:55 2010
@@ -0,0 +1,120 @@
+[/
+ / Copyright (c) 2003-2010 Christopher M. Kohlhoff (chris at kohlhoff dot com)
+ /
+ / 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)
+ /]
+
+[section:DescriptorService Descriptor service requirements]
+
+A descriptor service must meet the requirements for an [link
+boost_asio.reference.IoObjectService I/O object service], as well as the
+additional requirements listed below.
+
+In the table below, `X` denotes a descriptor service class, `a` denotes a value +of type `X`, `b` denotes a value of type `X::implementation_type`, `n` denotes +a value of type `X::native_type`, `ec` denotes a value of type `error_code`,
+`i` denotes a value meeting [link boost_asio.reference.IoControlCommand
+`IoControlCommand`] requirements, and `u` and `v` denote identifiers.
+
+[table DescriptorService requirements
+  [[expression] [return type] [assertion/note\npre/post-condition]]
+  [
+    [`X::native_type`]
+    []
+    [
+ The implementation-defined native representation of a descriptor. Must + satisfy the requirements of `CopyConstructible` types (C++ Std, 20.1.3),
+      and the requirements of `Assignable` types (C++ Std, 23.1).
+    ]
+  ]
+  [
+    [`a.construct(b);`]
+    []
+    [
+      From [link boost_asio.reference.IoObjectService IoObjectService]
+      requirements.\n
+      post: `!a.is_open(b)`.
+    ]
+  ]
+  [
+    [`a.destroy(b);`]
+    []
+    [
+      From [link boost_asio.reference.IoObjectService IoObjectService]
+ requirements. Implicitly cancels asynchronous operations, as if by calling
+      `a.close(b, ec)`.
+    ]
+  ]
+  [
+    [``
+      a.assign(b, n, ec);
+    ``]
+    [`error_code`]
+    [
+      pre: `!a.is_open(b)`.\n
+      post: `!!ec || a.is_open(b)`.
+    ]
+  ]
+  [
+    [``
+      a.is_open(b);
+    ``]
+    [`bool`]
+    [
+    ]
+  ]
+  [
+    [``
+      const X& u = a;
+      const X::implementation_type& v = b;
+      u.is_open(v);
+    ``]
+    [`bool`]
+    [
+    ]
+  ]
+  [
+    [``
+      a.close(b, ec);
+    ``]
+    [`error_code`]
+    [
+ If `a.is_open()` is true, causes any outstanding asynchronous operations + to complete as soon as possible. Handlers for cancelled operations shall
+      be passed the error code `error::operation_aborted`.\n
+      post: `!a.is_open(b)`.
+    ]
+  ]
+  [
+    [``
+      a.native(b);
+    ``]
+    [`X::native_type`]
+    [
+    ]
+  ]
+  [
+    [``
+      a.cancel(b, ec);
+    ``]
+    [`error_code`]
+    [
+      pre: `a.is_open(b)`.\n
+      Causes any outstanding asynchronous operations to complete as soon as
+      possible. Handlers for cancelled operations shall be passed the error
+      code `error::operation_aborted`.
+    ]
+  ]
+  [
+    [``
+      a.io_control(b, i, ec);
+    ``]
+    [`error_code`]
+    [
+      pre: `a.is_open(b)`.
+    ]
+  ]
+]
+
+[endsect]
=======================================
--- /dev/null
+++ /trunk/libs/asio/doc/requirements/Endpoint.qbk      Sun Feb  7 18:57:55 2010
@@ -0,0 +1,93 @@
+[/
+ / Copyright (c) 2003-2010 Christopher M. Kohlhoff (chris at kohlhoff dot com)
+ /
+ / 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)
+ /]
+
+[section:Endpoint Endpoint requirements]
+
+An endpoint must meet the requirements of `CopyConstructible` types (C++ Std,
+20.1.3), and the requirements of `Assignable` types (C++ Std, 23.1).
+
+In the table below, `X` denotes an endpoint class, `a` denotes a value of type
+`X`, `s` denotes a size in bytes, and `u` denotes an identifier.
+
+[table Endpoint requirements
+  [[expression] [type] [assertion/note\npre/post-conditions]]
+  [
+    [`X::protocol_type`]
+ [type meeting [link boost_asio.reference.Protocol protocol] requirements]
+    []
+  ]
+  [
+    [`X u;`]
+    []
+    []
+  ]
+  [
+    [`X();`]
+    []
+    []
+  ]
+  [
+    [`a.protocol();`]
+    [`protocol_type`]
+    []
+  ]
+  [
+    [`a.data();`]
+    [a pointer]
+    [
+      Returns a pointer suitable for passing as the /address/ argument to
+ __POSIX__ functions such as __accept__, __getpeername__, __getsockname__
+      and __recvfrom__. The implementation shall perform a
+      `reinterpret_cast` on the pointer to convert it to `sockaddr*`.
+    ]
+  ]
+  [
+    [`const X& u = a;
+      u.data();`]
+    [a pointer]
+    [
+      Returns a pointer suitable for passing as the /address/ argument to
+ __POSIX__ functions such as __connect__, or as the /dest_addr/ argument
+      to __POSIX__ functions such as  __sendto__. The implementation shall
+      perform a `reinterpret_cast` on the pointer to convert it to `const
+      sockaddr*`.
+    ]
+  ]
+  [
+    [`a.size();`]
+    [`size_t`]
+    [
+      Returns a value suitable for passing as the /address_len/ argument
+ to __POSIX__ functions such as __connect__, or as the /dest_len/ argument
+      to __POSIX__ functions such as __sendto__, after appropriate integer
+      conversion has been performed.
+    ]
+  ]
+  [
+    [`a.resize(s);`]
+    []
+    [
+      post: `a.size() == s`\n
+      Passed the value contained in the /address_len/ argument to __POSIX__
+      functions such as __accept__, __getpeername__, __getsockname__ and
+ __recvfrom__, after successful completion of the function. Permitted to + throw an exception if the protocol associated with the endpoint object `a`
+      does not support the specified size.
+    ]
+  ]
+  [
+    [`a.capacity();`]
+    [`size_t`]
+    [
+      Returns a value suitable for passing as the /address_len/ argument to
+ __POSIX__ functions such as __accept__, __getpeername__, __getsockname__ + and __recvfrom__, after appropriate integer conversion has been performed.
+    ]
+  ]
+]
+
+[endsect]
=======================================
--- /dev/null
+++ /trunk/libs/asio/doc/requirements/GettableSerialPortOption.qbk Sun Feb 7 18:57:55 2010
@@ -0,0 +1,33 @@
+[/
+ / Copyright (c) 2003-2010 Christopher M. Kohlhoff (chris at kohlhoff dot com)
+ /
+ / 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)
+ /]
+
+[section:GettableSerialPortOption Gettable serial port option requirements]
+
+In the table below, `X` denotes a serial port option class, `a` denotes a value +of `X`, `ec` denotes a value of type `error_code`, and `s` denotes a value of
+implementation-defined type ['[^storage]] (where ['[^storage]] is the type
+`DCB` on Windows and `termios` on __POSIX__ platforms), and `u` denotes an
+identifier.
+
+[table GettableSerialPortOption requirements
+  [[expression] [type] [assertion/note\npre/post-conditions]]
+  [
+    [
+      `const `['[^storage]]`& u = s;`\n
+      `a.load(u, ec);`
+    ]
+    [`error_code`]
+    [
+      Retrieves the value of the serial port option from the storage.\n
+      \n
+ If successful, sets `ec` such that `!ec` is true. If an error occurred,
+      sets `ec` such that `!!ec` is true. Returns `ec`.
+    ]
+  ]
+]
+
+[endsect]
=======================================
--- /dev/null
+++ /trunk/libs/asio/doc/requirements/GettableSocketOption.qbk Sun Feb 7 18:57:55 2010
@@ -0,0 +1,62 @@
+[/
+ / Copyright (c) 2003-2010 Christopher M. Kohlhoff (chris at kohlhoff dot com)
+ /
+ / 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)
+ /]
+
+[section:GettableSocketOption Gettable socket option requirements]
+
+In the table below, `X` denotes a socket option class, `a` denotes a value of
+`X`, `p` denotes a value that meets the [link boost_asio.reference.Protocol
+protocol] requirements, and `u` denotes an identifier.
+
+[table GettableSocketOption requirements
+  [[expression] [type] [assertion/note\npre/post-conditions]]
+  [
+    [`a.level(p);`]
+    [`int`]
+    [
+ Returns a value suitable for passing as the /level/ argument to __POSIX__
+      __getsockopt__ (or equivalent).
+    ]
+  ]
+  [
+    [`a.name(p);`]
+    [`int`]
+    [
+      Returns a value suitable for passing as the /option_name/ argument to
+      __POSIX__ __getsockopt__ (or equivalent).
+    ]
+  ]
+  [
+    [`a.data(p);`]
+    [a pointer, convertible to `void*`]
+    [
+ Returns a pointer suitable for passing as the /option_value/ argument to
+      __POSIX__ __getsockopt__ (or equivalent).
+    ]
+  ]
+  [
+    [`a.size(p);`]
+    [`size_t`]
+    [
+      Returns a value suitable for passing as the /option_len/ argument to
+      __POSIX__ __getsockopt__ (or equivalent), after appropriate
+      integer conversion has been performed.
+    ]
+  ]
+  [
+    [`a.resize(p, s);`]
+    []
+    [
+      post: `a.size(p) == s`.\n
+      Passed the value contained in the /option_len/ argument to __POSIX__
+      __getsockopt__ (or equivalent) after successful completion of the
+ function. Permitted to throw an exception if the socket option object `a`
+      does not support the specified size.
+    ]
+  ]
+]
+
+[endsect]
=======================================
--- /dev/null
+++ /trunk/libs/asio/doc/requirements/HandleService.qbk Sun Feb 7 18:57:55 2010
@@ -0,0 +1,110 @@
+[/
+ / Copyright (c) 2003-2010 Christopher M. Kohlhoff (chris at kohlhoff dot com)
+ /
+ / 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)
+ /]
+
+[section:HandleService Handle service requirements]
+
+A handle service must meet the requirements for an [link
+boost_asio.reference.IoObjectService I/O object service], as well as the
+additional requirements listed below.
+
+In the table below, `X` denotes a handle service class, `a` denotes a value of +type `X`, `b` denotes a value of type `X::implementation_type`, `n` denotes a +value of type `X::native_type`, `ec` denotes a value of type `error_code`, and
+`u` and `v` denote identifiers.
+
+[table HandleService requirements
+  [[expression] [return type] [assertion/note\npre/post-condition]]
+  [
+    [`X::native_type`]
+    []
+    [
+      The implementation-defined native representation of a handle. Must
+ satisfy the requirements of `CopyConstructible` types (C++ Std, 20.1.3),
+      and the requirements of `Assignable` types (C++ Std, 23.1).
+    ]
+  ]
+  [
+    [`a.construct(b);`]
+    []
+    [
+      From [link boost_asio.reference.IoObjectService IoObjectService]
+      requirements.\n
+      post: `!a.is_open(b)`.
+    ]
+  ]
+  [
+    [`a.destroy(b);`]
+    []
+    [
+      From [link boost_asio.reference.IoObjectService IoObjectService]
+ requirements. Implicitly cancels asynchronous operations, as if by calling
+      `a.close(b, ec)`.
+    ]
+  ]
+  [
+    [``
+      a.assign(b, n, ec);
+    ``]
+    [`error_code`]
+    [
+      pre: `!a.is_open(b)`.\n
+      post: `!!ec || a.is_open(b)`.
+    ]
+  ]
+  [
+    [``
+      a.is_open(b);
+    ``]
+    [`bool`]
+    [
+    ]
+  ]
+  [
+    [``
+      const X& u = a;
+      const X::implementation_type& v = b;
+      u.is_open(v);
+    ``]
+    [`bool`]
+    [
+    ]
+  ]
+  [
+    [``
+      a.close(b, ec);
+    ``]
+    [`error_code`]
+    [
+ If `a.is_open()` is true, causes any outstanding asynchronous operations + to complete as soon as possible. Handlers for cancelled operations shall
+      be passed the error code `error::operation_aborted`.\n
+      post: `!a.is_open(b)`.
+    ]
+  ]
+  [
+    [``
+      a.native(b);
+    ``]
+    [`X::native_type`]
+    [
+    ]
+  ]
+  [
+    [``
+      a.cancel(b, ec);
+    ``]
+    [`error_code`]
+    [
+      pre: `a.is_open(b)`.\n
+      Causes any outstanding asynchronous operations to complete as soon as
+      possible. Handlers for cancelled operations shall be passed the error
+      code `error::operation_aborted`.
+    ]
+  ]
+]
+
+[endsect]
=======================================
***Additional files exist in this changeset.***

Other related posts:

  • » [boost-doc-zh] r375 committed - 升级至1.41.0,第一批,libs/目录下a子目录 - boost-doc-zh