Revision: 436 Author: jinq0123@xxxxxxx Date: Tue Aug 23 20:21:16 2011Log: libs/asio/doc升级到boost_1_47_0. 从boost_1_47_0复制该目录. 该目录 是qbk源文件, 已检查确认都是待译状态.
http://code.google.com/p/boost-doc-zh/source/detail?r=436 Added: /trunk/libs/asio/doc/overview/cpp2011.qbk /trunk/libs/asio/doc/overview/handler_tracking.qbk /trunk/libs/asio/doc/overview/signals.qbk /trunk/libs/asio/doc/requirements/ComposedConnectHandler.qbk /trunk/libs/asio/doc/requirements/HandshakeHandler.qbk /trunk/libs/asio/doc/requirements/SeqPacketSocketService.qbk /trunk/libs/asio/doc/requirements/ShutdownHandler.qbk /trunk/libs/asio/doc/requirements/SignalHandler.qbk /trunk/libs/asio/doc/requirements/SignalSetService.qbk Modified: /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/index.xml /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/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/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/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/quickref.xml /trunk/libs/asio/doc/reference.qbk /trunk/libs/asio/doc/reference.xsl /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.qbk /trunk/libs/asio/doc/tutorial.xsl /trunk/libs/asio/doc/using.qbk ======================================= --- /dev/null +++ /trunk/libs/asio/doc/overview/cpp2011.qbk Tue Aug 23 20:21:16 2011 @@ -0,0 +1,194 @@ +[/+ / Copyright (c) 2003-2011 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:cpp2011 C++ 2011 Support] + + +[link boost_asio.overview.cpp2011.move_objects Movable I/O Objects] + +[link boost_asio.overview.cpp2011.move_handlers Movable Handlers] + +[link boost_asio.overview.cpp2011.variadic Variadic Templates] + +[link boost_asio.overview.cpp2011.array Array Container] + +[link boost_asio.overview.cpp2011.atomic Atomics] + +[link boost_asio.overview.cpp2011.shared_ptr Shared Pointers] + + +[section:move_objects Movable I/O Objects] ++When move support is available (via rvalue references), Boost.Asio allows move
+construction and assignment of sockets, serial ports, POSIX descriptors and +Windows handles. + +Move support allows you to write code like: + + tcp::socket make_socket(io_service& i) + { + tcp::socket s(i); + ... + std::move(s); + } + +or: + + class connection : public enable_shared_from_this<connection> + { + private: + tcp::socket socket_; + ... + public: + connection(tcp::socket&& s) : socket_(std::move(s)) {} + ... + }; + + ... + + class server + { + private: + tcp::acceptor acceptor_; + tcp::socket socket_; + ... + void handle_accept(error_code ec) + { + if (!ec) + std::make_shared<connection>(std::move(socket_))->go(); + acceptor_.async_accept(socket_, ...); + } + ... + }; + +as well as: + + std::vector<tcp::socket> sockets; + sockets.push_back(tcp::socket(...)); + +A word of warning: There is nothing stopping you from moving these objects +while there are pending asynchronous operations, but it is unlikely to be a +good idea to do so. In particular, composed operations like [link+boost_asio.reference.async_read async_read()] store a reference to the stream object.
+Moving during the composed operation means that the composed operation may +attempt to access a moved-from object. + +Move support is automatically enabled for [^g++] 4.5 and later, when the+[^-std=c++0x] or [^-std=gnu++0x] compiler options are used. It may be disabled +by defining `BOOST_ASIO_DISABLE_MOVE`, or explicitly enabled for other compilers by +defining `BOOST_ASIO_HAS_MOVE`. Note that these macros also affect the availability
+of [link boost_asio.overview.cpp2011.move_handlers movable handlers]. + +[endsect] + +[section:move_handlers Movable Handlers] + +As an optimisation, user-defined completion handlers may provide move+constructors, and Boost.Asio's implementation will use a handler's move constructor +in preference to its copy constructor. In certain circumstances, Boost.Asio may be +able to eliminate all calls to a handler's copy constructor. However, handler
+types are still required to be copy constructible. + +When move support is enabled, asynchronous that are documented as follows: + + template <typename Handler> + void async_XYZ(..., Handler handler); + +are actually declared as: + + template <typename Handler> + void async_XYZ(..., Handler&& handler); ++The handler argument is perfectly forwarded and the move construction occurs
+within the body of `async_XYZ()`. This ensures that all other function +arguments are evaluated prior to the move. This is critical when the other +arguments to `async_XYZ()` are members of the handler. For example: + + struct my_operation + { + shared_ptr<tcp::socket> socket; + shared_ptr<vector<char>> buffer; + ... + void operator(error_code ec, size_t length) + { + ...+ socket->async_read_some(boost::asio::buffer(*buffer), std::move(*this));
+ ... + } + }; + +Move support is automatically enabled for [^g++] 4.5 and later, when the+[^-std=c++0x] or [^-std=gnu++0x] compiler options are used. It may be disabled +by defining `BOOST_ASIO_DISABLE_MOVE`, or explicitly enabled for other compilers by +defining `BOOST_ASIO_HAS_MOVE`. Note that these macros also affect the availability
+of [link boost_asio.overview.cpp2011.move_objects movable I/O objects]. + +[endsect] + +[section:variadic Variadic Templates] ++When supported by a compiler, Boost.Asio can use variadic templates to implement the
+[link boost_asio.reference.basic_socket_streambuf.connect +basic_socket_streambuf::connect()] and [link+boost_asio.reference.basic_socket_iostream.connect basic_socket_iostream::connect()]
+functions. + +Support for variadic templates is automatically enabled for [^g++] 4.3 and+later, when the [^-std=c++0x] or [^-std=gnu++0x] compiler options are used. It +may be disabled by defining `BOOST_ASIO_DISABLE_VARIADIC_TEMPLATES`, or explicitly +enabled for other compilers by defining `BOOST_ASIO_HAS_VARIADIC_TEMPLATES`.
+ +[endsect] + +[section:array Array Container] + +Where the standard library provides `std::array<>`, Boost.Asio: ++* Provides overloads for the [link boost_asio.reference.buffer buffer()] function.
+ +* Uses it in preference to `boost::array<>` for the+ [link boost_asio.reference.ip__address_v4.bytes_type ip::address_v4::bytes_type] and + [link boost_asio.reference.ip__address_v6.bytes_type ip::address_v6::bytes_type]
+ types. ++* Uses it in preference to `boost::array<>` where a fixed size array type is
+ needed in the implementation. ++Support for `std::array<>` is automatically enabled for [^g++] 4.3 and later, +when the [^-std=c++0x] or [^-std=gnu++0x] compiler options are used, as well as
+for Microsoft Visual C++ 10. It may be disabled by defining+`BOOST_ASIO_DISABLE_STD_ARRAY`, or explicitly enabled for other compilers by
+defining `BOOST_ASIO_HAS_STD_ARRAY`. + +[endsect] + +[section:atomic Atomics] + +Boost.Asio's implementation can use `std::atomic<>` in preference to +`boost::detail::atomic_count`. ++Support for the standard atomic integer template is automatically enabled for
+[^g++] 4.5 and later, when the [^-std=c++0x] or [^-std=gnu++0x] compiler+options are used. It may be disabled by defining `BOOST_ASIO_DISABLE_STD_ATOMIC`, or +explicitly enabled for other compilers by defining `BOOST_ASIO_HAS_STD_ATOMIC`.
+ +[endsect] + +[section:shared_ptr Shared Pointers] ++Boost.Asio's implementation can use `std::shared_ptr<>` and `std::weak_ptr<>` in
+preference to the Boost equivalents. ++Support for the standard smart pointers is automatically enabled for [^g++] 4.3 +and later, when the [^-std=c++0x] or [^-std=gnu++0x] compiler options are used,
+as well as for Microsoft Visual C++ 10. It may be disabled by defining+`BOOST_ASIO_DISABLE_STD_SHARED_PTR`, or explicitly enabled for other compilers by
+defining `BOOST_ASIO_HAS_STD_SHARED_PTR`. + +[endsect] + +[endsect] ======================================= --- /dev/null+++ /trunk/libs/asio/doc/overview/handler_tracking.qbk Tue Aug 23 20:21:16 2011
@@ -0,0 +1,102 @@ +[/+ / Copyright (c) 2003-2011 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:handler_tracking Handler Tracking] ++To aid in debugging asynchronous programs, Boost.Asio provides support for handler +tracking. When enabled by defining `BOOST_ASIO_ENABLE_HANDLER_TRACKING`, Boost.Asio
+writes debugging output to the standard error stream. The output records +asynchronous operations and the relationships between their handlers. + +[teletype] +This feature is useful when debugging and you need to know how your+asynchronous operations are chained together, or what the pending asynchronous +operations are. As an illustration, here is the output when you run the HTTP
+Server example, handle a single request, then shut down via Ctrl+C: + + @asio|1298160085.070638|0*1|signal_set@xxxxxxxxxxxxxxxxxxxxxxxxx + @asio|1298160085.070888|0*2|socket@xxxxxxxxxxxxxxxxxxxxxxxxxxx + @asio|1298160085.070913|0|resolver@xxxxxxxxxxxxxxxxxxxxx + @asio|1298160118.075438|>2|ec=asio.system:0 + @asio|1298160118.075472|2*3|socket@xxxxxxxxxxxxxxxxxxxxxx + @asio|1298160118.075507|2*4|socket@xxxxxxxxxxxxxxxxxxxxxxxxxxx + @asio|1298160118.075527|<2| + @asio|1298160118.075540|>3|ec=asio.system:0,bytes_transferred=122 + @asio|1298160118.075731|3*5|socket@xxxxxxxxxxxxxxxxxxx + @asio|1298160118.075778|<3| + @asio|1298160118.075793|>5|ec=asio.system:0,bytes_transferred=156 + @asio|1298160118.075831|5|socket@xxxxxxxxxxxxxx + @asio|1298160118.075855|<5| + @asio|1298160122.827317|>1|ec=asio.system:0,signal_number=2 + @asio|1298160122.827333|1|socket@xxxxxxxxxxxxxxxxxxxx + @asio|1298160122.827359|<1| + @asio|1298160122.827370|>4|ec=asio.system:125 + @asio|1298160122.827378|<4| + @asio|1298160122.827394|0|signal_set@xxxxxxxxxxxxxxxxxxxxx + +Each line is of the form: + + <tag>|<timestamp>|<action>|<description> ++The `<tag>` is always `@asio`, and is used to identify and extract the handler
+tracking messages from the program output. + +The `<timestamp>` is seconds and microseconds from 1 Jan 1970 UTC. + +The `<action>` takes one of the following forms: + +[variablelist + [ + [>n]+ [The program entered the handler number `n`. The `<description>` shows the
+ arguments to the handler.] + ] + [ + [<n] + [The program left handler number `n`.] + ] + [ + [!n] + [The program left handler number n due to an exception.] + ] + [ + [~n]+ [The handler number `n` was destroyed without having been invoked. This is
+ usually the case for any unfinished asynchronous operations when the + `io_service` is destroyed.] + ] + [ + [n*m]+ [The handler number `n` created a new asynchronous operation with completion + handler number `m`. The `<description>` shows what asynchronous operation
+ was started.] + ] + [ + [n]+ [The handler number n performed some other operation. The `<description>`
+ shows what function was called. Currently only `close()` and `cancel()` + operations are logged, as these may affect the state of pending + asynchronous operations.] + ] +] ++Where the `<description>` shows a synchronous or asynchronous operation, the +format is `<object-type>@<pointer>.<operation>`. For handler entry, it shows a
+comma-separated list of arguments and their values. + +As shown above, Each handler is assigned a numeric identifier. Where the+handler tracking output shows a handler number of 0, it means that the action
+was performed outside of any handler. + +[heading Visual Representations] + +The handler tracking output may be post-processed using the included +[^handlerviz.pl] tool to create a visual representation of the handlers +(requires the GraphViz tool [^dot]). +[c++] + +[endsect] ======================================= --- /dev/null +++ /trunk/libs/asio/doc/overview/signals.qbk Tue Aug 23 20:21:16 2011 @@ -0,0 +1,43 @@ +[/+ / Copyright (c) 2003-2011 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:signals Signal Handling] + +Boost.Asio supports signal handling using a class called [link+boost_asio.reference.signal_set signal_set]. Programs may add one or more signals to +the set, and then perform an `async_wait()` operation. The specified handler +will be called when one of the signals occurs. The same signal number may be +registered with multiple [link boost_asio.reference.signal_set signal_set] objects,
+however the signal number must be used only with Boost.Asio. + + void handler( + const boost::system::error_code& error, + int signal_number) + { + if (!error) + { + // A signal occurred. + } + } + + ... + + // Construct a signal set registered for process termination. + boost::asio::signal_set signals(io_service, SIGINT, SIGTERM); + + // Start an asynchronous wait for one of the signals to occur. + signals.async_wait(handler); + +Signal handling also works on Windows, as the Microsoft Visual C++ runtime +library maps console events like Ctrl+C to the equivalent signal. + +[heading See Also] + +[link boost_asio.reference.signal_set signal_set], +[link boost_asio.examples.http_server HTTP server example]. + +[endsect] ======================================= --- /dev/null+++ /trunk/libs/asio/doc/requirements/ComposedConnectHandler.qbk Tue Aug 23 20:21:16 2011
@@ -0,0 +1,56 @@ +[/+ / Copyright (c) 2003-2011 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:ComposedConnectHandler Composed connect handler requirements] + +A composed connect handler must meet the requirements for a [link+boost_asio.reference.Handler handler]. A value `h` of a composed connect handler
+class should work correctly in the expression `h(ec, i)`, where `ec` is an+lvalue of type `const error_code` and `i` is an lvalue of the type `Iterator`
+used in the corresponding `connect()` or async_connect()` function. + +[heading Examples] + +A free function as a composed connect handler: + + void connect_handler( + const boost::system::error_code& ec, + boost::asio::ip::tcp::resolver::iterator iterator) + { + ... + } + +A composed connect handler function object: + + struct connect_handler + { + ... + template <typename Iterator> + void operator()( + const boost::system::error_code& ec, + Iterator iterator) + { + ... + } + ... + }; ++A non-static class member function adapted to a composed connect handler using `bind()`:
+ + void my_class::connect_handler( + const boost::system::error_code& ec, + boost::asio::ip::tcp::resolver::iterator iterator) + { + ... + } + ... + boost::asio::async_connect(..., + boost::bind(&my_class::connect_handler, + this, boost::asio::placeholders::error, + boost::asio::placeholders::iterator)); + +[endsect] ======================================= --- /dev/null+++ /trunk/libs/asio/doc/requirements/HandshakeHandler.qbk Tue Aug 23 20:21:16 2011
@@ -0,0 +1,50 @@ +[/+ / Copyright (c) 2003-2011 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:HandshakeHandler SSL handshake handler requirements] + +A handshake handler must meet the requirements for a [link +boost_asio.reference.Handler handler]. A value `h` of a handshake 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 handshake handler: + + void handshake_handler( + const boost::system::error_code& ec) + { + ... + } + +A handshake handler function object: + + struct handshake_handler + { + ... + void operator()( + const boost::system::error_code& ec) + { + ... + } + ... + }; ++A non-static class member function adapted to a handshake handler using `bind()`:
+ + void my_class::handshake_handler( + const boost::system::error_code& ec) + { + ... + } + ... + ssl_stream.async_handshake(..., + boost::bind(&my_class::handshake_handler, + this, boost::asio::placeholders::error)); + +[endsect] ======================================= --- /dev/null+++ /trunk/libs/asio/doc/requirements/SeqPacketSocketService.qbk Tue Aug 23 20:21:16 2011
@@ -0,0 +1,127 @@ +[/+ / Copyright (c) 2003-2011 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:SeqPacketSocketService Sequenced packet socket service requirements]
+ +A sequenced packet 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 stream socket service class, `a` denotes a +value of type `X`, `b` denotes a value of type `X::implementation_type`, `ec`
+denotes a value of type `error_code`, `f` denotes a value of type +`socket_base::message_flags`, `g` denotes an lvalue 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 StreamSocketService requirements + [[expression] [return type] [assertion/note\npre/post-condition]] + [ + [`a.receive(b, mb, f, g, 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, sets `g` to the flags associated with the received data,
+ and returns the number of bytes read. Otherwise, sets `g` to `0` and + returns `0`. + ] + ] + [ + [`a.async_receive(b, mb, f, g, 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.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 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, sets `g` to the flags associated + with the received data, then invokes the `ReadHandler` object `rh` with + the number of bytes transferred. Otherwise, sets `g` to `0` and invokes
+ `rh` with `0` bytes transferred. + ] + ] + [ + [`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.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 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/ShutdownHandler.qbk Tue Aug 23 20:21:16 2011
@@ -0,0 +1,50 @@ +[/+ / Copyright (c) 2003-2011 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:ShutdownHandler SSL shutdown handler requirements] + +A shutdown handler must meet the requirements for a [link +boost_asio.reference.Handler handler]. A value `h` of a shutdown 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 shutdown handler: + + void shutdown_handler( + const boost::system::error_code& ec) + { + ... + } + +A shutdown handler function object: + + struct shutdown_handler + { + ... + void operator()( + const boost::system::error_code& ec) + { + ... + } + ... + }; ++A non-static class member function adapted to a shutdown handler using `bind()`:
+ + void my_class::shutdown_handler( + const boost::system::error_code& ec) + { + ... + } + ... + ssl_stream.async_shutdown( + boost::bind(&my_class::shutdown_handler, + this, boost::asio::placeholders::error)); + +[endsect] ======================================= --- /dev/null+++ /trunk/libs/asio/doc/requirements/SignalHandler.qbk Tue Aug 23 20:21:16 2011
@@ -0,0 +1,54 @@ +[/+ / Copyright (c) 2003-2011 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:SignalHandler Signal handler requirements] + +A signal handler must meet the requirements for a [link+boost_asio.reference.Handler handler]. A value `h` of a signal handler class +should work correctly in the expression `h(ec, n)`, where `ec` is an lvalue of
+type `const error_code` and `n` is an lvalue of type `const int`. + +[heading Examples] + +A free function as a signal handler: + + void signal_handler( + const boost::system::error_code& ec, + int signal_number) + { + ... + } + +A signal handler function object: + + struct signal_handler + { + ... + void operator()( + const boost::system::error_code& ec, + int signal_number) + { + ... + } + ... + }; ++A non-static class member function adapted to a signal handler using `bind()`:
+ + void my_class::signal_handler( + const boost::system::error_code& ec, + int signal_number) + { + ... + } + ... + my_signal_set.async_wait( + boost::bind(&my_class::signal_handler, + this, boost::asio::placeholders::error, + boost::asio::placeholders::signal_number)); + +[endsect] ======================================= --- /dev/null+++ /trunk/libs/asio/doc/requirements/SignalSetService.qbk Tue Aug 23 20:21:16 2011
@@ -0,0 +1,91 @@ +[/+ / Copyright (c) 2003-2011 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:SignalSetService Signal set service requirements] + +A signal set 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 signal set service class, `a` denotes a value +of type `X`, `b` denotes a value of type `X::implementation_type`, `ec` denotes
+a value of type `error_code`, `n` denotes a value of type `int`, and `sh`+denotes a value meeting [link boost_asio.reference.SignalHandler `SignalHandler`]
+requirements. + +[table SignalSetService requirements + [[expression] [return type] [assertion/note\npre/post-condition]] + [ + [`a.construct(b);`] + [] + [ + From [link boost_asio.reference.IoObjectService IoObjectService] + requirements.\n + ] + ] + [ + [`a.destroy(b);`] + [] + [ + From [link boost_asio.reference.IoObjectService IoObjectService]+ requirements. Implicitly clears the registered signals as if by calling
+ `a.clear(b, ec)`, then implicitly cancels outstanding asynchronous + operations as if by calling `a.cancel(b, ec)`. + ] + ] + [ + [`` + a.add(b, n, ec); + ``] + [`error_code`] + [ + ] + ] + [ + [`` + a.remove(b, n, ec); + ``] + [`error_code`] + [ + ] + ] + [ + [`` + a.clear(b, ec); + ``] + [`error_code`] + [ + ] + ] + [ + [`` + a.cancel(b, ec); + ``] + [`error_code`] + [ + ] + ] + [ + [`a.async_wait(b, sh);`] + [`void`] + [ + pre: `a.is_open(b)`.\n + \n+ Initiates an asynchronous operation to wait for the delivery of one of the + signals registered for the signal set `b`. 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 + If the operation completes successfully, the `SignalHandler` object+ `sh` is invoked with the number identifying the delivered signal. Otherwise
+ it is invoked with `0`. + ] + ] +] + +[endsect] ======================================= --- /trunk/libs/asio/doc/Jamfile.v2 Wed Aug 18 08:21:10 2010 +++ /trunk/libs/asio/doc/Jamfile.v2 Tue Aug 23 20:21:16 2011 @@ -1,5 +1,5 @@ -#-# Copyright (c) 2003-2010 Christopher M. Kohlhoff (chris at kohlhoff dot com)
+#+# Copyright (c) 2003-2011 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) @@ -25,7 +25,7 @@ <location>html/boost_asio ; -local example-names = allocation buffers chat echo http/client http/server+local example-names = allocation buffers chat echo fork http/client http/server
http/server2 http/server3 http/server4 icmp invocation iostreams localmulticast nonblocking porthopper serialization services socks4 ssl timeouts
timers windows ; @@ -97,9 +97,12 @@ <xsl:param>generate.toc="chapter nop section nop" <xsl:param>root.filename=boost_asio <format>pdf:<xsl:param>img.src.path=$(images_location)/+ <format>pdf:<xsl:param>boost.url.prefix=http://www.boost.org/doc/libs/release/libs/asio/doc/html
: <dependency>asio_doc_images <dependency>asio_examples ; explicit asio ; + + ======================================= --- /trunk/libs/asio/doc/asio.qbk Sun Feb 7 18:57:55 2010 +++ /trunk/libs/asio/doc/asio.qbk Tue Aug 23 20:21:16 2011 @@ -1,5 +1,5 @@ [/- / Copyright (c) 2003-2010 Christopher M. Kohlhoff (chris at kohlhoff dot com) + / Copyright (c) 2003-2011 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) @@ -7,7 +7,7 @@ [library Boost.Asio [quickbook 1.4] - [copyright 2003 - 2010 Christopher M. Kohlhoff] + [copyright 2003 - 2011 Christopher M. Kohlhoff] [purpose Networking library] [license Distributed under the Boost Software License, Version 1.0. @@ -37,9 +37,9 @@[/=============================================================================]
-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.+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 [ @@ -74,8 +74,7 @@ [link boost_asio.examples Examples] ] [ - Examples that illustrate the use of Boost.Asio in more complex - applications.+ Examples that illustrate the use of Boost.Asio in more complex applications.
] ] [ ======================================= --- /trunk/libs/asio/doc/doxy2qbk.pl Sun Feb 7 18:57:55 2010 +++ /trunk/libs/asio/doc/doxy2qbk.pl Tue Aug 23 20:21:16 2011 @@ -1,6 +1,6 @@ #!/usr/bin/perl -w-# Copyright (c) 2003-2010 Christopher M. Kohlhoff (chris at kohlhoff dot com) +# Copyright (c) 2003-2011 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) ======================================= --- /trunk/libs/asio/doc/examples.qbk Wed Aug 18 08:21:10 2010 +++ /trunk/libs/asio/doc/examples.qbk Tue Aug 23 20:21:16 2011 @@ -1,5 +1,5 @@ [/- / Copyright (c) 2003-2010 Christopher M. Kohlhoff (chris at kohlhoff dot com) + / Copyright (c) 2003-2011 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) @@ -34,8 +34,8 @@ * [@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.+[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] @@ -53,6 +53,20 @@ * [@boost_asio/example/echo/blocking_udp_echo_server.cpp] +[heading Fork] ++These POSIX-specific examples show how to use Boost.Asio in conjunction with the +`fork()` system call. The first example illustrates the steps required to start
+a daemon process: + +* [@boost_asio/example/fork/daemon.cpp] + +The second example demonstrates how it is possible to fork a process from +within a completion handler. + +* [@boost_asio/example/fork/process_per_connection.cpp] + + [heading HTTP Client]Example programs implementing simple HTTP 1.0 clients. These examples show how
@@ -74,9 +88,9 @@ * [@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/main.cpp] * [@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] @@ -86,7 +100,6 @@ * [@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] @@ -98,9 +111,9 @@ * [@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/main.cpp] * [@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] @@ -110,7 +123,6 @@ * [@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] @@ -120,9 +132,9 @@ * [@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/main.cpp] * [@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] @@ -132,7 +144,6 @@ * [@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] @@ -143,9 +154,9 @@ * [@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/main.cpp] * [@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] @@ -154,7 +165,6 @@ * [@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] @@ -182,6 +192,7 @@ * [@boost_asio/example/iostreams/daytime_client.cpp] * [@boost_asio/example/iostreams/daytime_server.cpp] +* [@boost_asio/example/iostreams/http_client.cpp] [heading Multicast] @@ -231,8 +242,7 @@ [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.reference.ssl__stream ssl::stream<>] template with asynchronous operations.
* [@boost_asio/example/ssl/client.cpp] * [@boost_asio/example/ssl/server.cpp] ======================================= --- /trunk/libs/asio/doc/history.qbk Wed Aug 18 08:21:10 2010 +++ /trunk/libs/asio/doc/history.qbk Tue Aug 23 20:21:16 2011 @@ -1,5 +1,5 @@ [/- / Copyright (c) 2003-2010 Christopher M. Kohlhoff (chris at kohlhoff dot com) + / Copyright (c) 2003-2011 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) @@ -7,6 +7,214 @@ [section:history Revision History] +[heading Asio 1.6.0 / Boost 1.47] + +* Added support for signal handling, using a new class called `signal_set`. + Programs may add one or more signals to the set, and then perform an+ `async_wait()` operation. The specified handler will be called when one of + the signals occurs. The same signal number may be registered with multiple + `signal_set` objects, however the signal number must be used only with Asio.
+ Addresses [@https://svn.boost.org/trac/boost/ticket/2879 #2879]. +* Added handler tracking, a new debugging aid. When enabled by defining + `BOOST_ASIO_ENABLE_HANDLER_TRACKING`, Asio writes debugging output to the + standard error stream. The output records asynchronous operations and the + relationships between their handlers. It may be post-processed using the + included [^handlerviz.pl] tool to create a visual representation of the + handlers (requires GraphViz).+* Added support for timeouts on socket iostreams, such as `ip::tcp::iostream`.
+ A timeout is set by calling `expires_at()` or `expires_from_now()` to + establish a deadline. Any socket operations which occur past the deadline + will put the iostream into a bad state.+* Added a new `error()` member function to socket iostreams, for retrieving the
+ error code from the most recent system call.+* Added a new `basic_deadline_timer::cancel_one()` function. This function lets
+ you cancel a single waiting handler on a timer. Handlers are cancelled in + FIFO order.+* Added a new `transfer_exactly()` completion condition. This can be used to
+ send or receive a specified number of bytes even if the total size of the + buffer (or buffer sequence) is larger.+* Added new free functions `connect()` and `async_connect()`. These operations + try each endpoint in a list until the socket is successfully connected, and
+ are useful for creating TCP clients that work with both IPv4 and IPv6.+* Extended the `buffer_size()` function so that it works for buffer sequences
+ in addition to individual buffers.+* Added a new `buffer_copy()` function that can be used to copy the raw bytes
+ between individual buffers and buffer sequences. +* Added new non-throwing overloads of `read()`, `read_at()`, `write()` and + `write_at()` that do not require a completion condition.+* Added friendlier compiler errors for when a completion handler does not meet + the necessary type requirements. When C++0x is available (currently supported
+ for [^g++] 4.5 or later, and MSVC 10), `static_assert` is also used to + generate an informative error message. This checking may be disabled by + defining `BOOST_ASIO_DISABLE_HANDLER_TYPE_REQUIREMENTS`.+* Added a new, completely rewritten SSL implementation. The new implementation
+ compiles faster, shows substantially improved performance, and supports+ custom memory allocation and handler invocation. It includes new API features + such as certificate verification callbacks and has improved error reporting.
+ The new implementation is source-compatible with the old for most uses.+ However, if necessary, the old implementation may still be used by defining
+ `BOOST_ASIO_ENABLE_OLD_SSL`. + Addresses [@https://svn.boost.org/trac/boost/ticket/3702 #3702], + [@https://svn.boost.org/trac/boost/ticket/3958 #3958]. +* Changed the separate compilation support such that, to use Asio's SSL+ capabilities, you should also include `boost/asio/ssl/impl/src.hpp` in one
+ source file in your program.+* Changed the SSL implementation to support build environments where SSL v2 is + explicitly disabled ([@https://svn.boost.org/trac/boost/ticket/5453 #5453]). +* Made the `is_loopback()`, `is_unspecified()` and `is_multicast()` functions
+ consistently available across the `ip::address`, `ip::address_v4` and + `ip::address_v6` classes + ([@https://svn.boost.org/trac/boost/ticket/3939 #3939]).+* Added new `non_blocking()` functions for managing the non-blocking behaviour + of a socket or descriptor. The `io_control()` commands named `non_blocking_io`
+ are now deprecated in favour of these new functions. +* Added new `native_non_blocking()` functions for managing the non-blocking+ mode of the underlying socket or descriptor. These functions are intended to
+ allow the encapsulation of arbitrary non-blocking system calls as + asynchronous operations, in a way that is transparent to the user of the + socket object. The functions have no effect on the behaviour of the + synchronous operations of the socket or descriptor. +* Added the `io_control()` member function for socket acceptors + ([@https://svn.boost.org/trac/boost/ticket/3297 #3297]). +* Added a `release()` member function to posix descriptors. This function + releases ownership of the underlying native descriptor to the caller. + Addresses [@https://svn.boost.org/trac/boost/ticket/3900 #3900]. +* Added support for sequenced packet sockets (`SOCK_SEQPACKET`).+* Added a new `io_service::stopped()` function that can be used to determine + whether the `io_service` has stopped (i.e. a `reset()` call is needed prior
+ to any further calls to `run()`, `run_one()`, `poll()` or `poll_one()`).+* For consistency with the C++0x standard library, deprecated the `native_type`
+ typedefs in favour of `native_handle_type`, and the `native()` member + functions in favour of `native_handle()`.+* Added support for C++0x move construction and assignment to sockets, serial
+ ports, POSIX descriptors and Windows handles. +* Reduced the copying of handler function objects. +* Added support for C++0x move construction to further reduce (and in some + cases eliminate) copying of handler objects.+* Added support for the `fork()` system call. Programs that use `fork()` must + call `io_service.notify_fork()` at the appropriate times. Two new examples
+ have been added showing how to use this feature. Addresses + [@https://svn.boost.org/trac/boost/ticket/3238 #3238], + [@https://svn.boost.org/trac/boost/ticket/4162 #4162].+* Cleaned up the handling of errors reported by the `close()` system call. In + particular, assume that most operating systems won't have `close()` fail with + `EWOULDBLOCK`, but if it does then set the blocking mode and restart the call.
+ If any other error occurs, assume the descriptor is closed. Addresses + [@https://svn.boost.org/trac/boost/ticket/3307 #3307]. +* Added new `asio::buffer()` overloads for `std::array`, when available. +* Changed the implementation to use the C++0x standard library templates + `array`, `shared_ptr`, `weak_ptr` and `atomic` when they are available, + rather than the Boost equivalents.+* Use C++0x variadic templates when available, rather than generating function
+ overloads using Boost.Preprocessor.+* Changed exception reporting to include the function name in exception `what()`
+ messages. +* Fixed insufficient initialisers warning with MinGW. +* Changed the `shutdown_service()` member functions to be private. +* Added archetypes for testing socket option functions. +* Changed the Boost.Asio examples so that they don't use Boost.Thread's + convenience header. Use the header file that is specifically for the + boost::thread class instead.+* Removed the dependency on OS-provided macros for the well-known IPv4 and IPv6 + addresses. This should eliminate annoying "missing braces around initializer"
+ warnings ([@https://svn.boost.org/trac/boost/ticket/3741 #3741]). +* Reduced the size of `ip::basic_endpoint<>` objects (such as + `ip::tcp::endpoint` and `ip::udp::endpoint`).+* Changed the reactor backends to assume that any descriptors or sockets added
+ using `assign()` may have been `dup()`-ed, and so require explicit + deregistration from the reactor + ([@https://svn.boost.org/trac/boost/ticket/4971 #4971]). +* Removed the deprecated member functions named `io_service()`. The + `get_io_service()` member functions should be used instead.+* Removed the deprecated typedefs `resolver_query` and `resolver_iterator` from
+ the `ip::tcp`, `ip::udp` and `ip::icmp` classes.+* Modified the `buffers_iterator<>` and `ip::basic_resolver_iterator` classes
+ so that the value_type typedefs are non-const byte types. +* Fixed warnings reported by g++'s [^-Wshadow] compiler option + ([@https://svn.boost.org/trac/boost/ticket/3905 #3905]).+* Added an explicit cast to convert the `FIONBIO` constant to int, to suppress
+ a compiler warning on some platforms + ([@https://svn.boost.org/trac/boost/ticket/5128 #5128]).+* Changed most examples to treat a failure by an accept operation as non-fatal
+ ([@https://svn.boost.org/trac/boost/ticket/5124 #5124]).+* Fixed an error in the [^tick_count_timer] example by making the duration type + signed. Previously, a wait on an already-passed deadline would not return for
+ a very long time ([@https://svn.boost.org/trac/boost/ticket/5418 #5418]). + +[heading Asio 1.4.9 / Boost 1.46.1] ++* `EV_ONESHOT` seems to cause problems on some versions of Mac OS X, with the
+ `io_service` destructor getting stuck inside the `close()` system call. + Changed the kqueue backend to use `EV_CLEAR` instead + ([@https://svn.boost.org/trac/boost/ticket/5021 #5021]). +* Fixed compile failures with some versions of [^g++] due to the use of + anonymous enums ([@https://svn.boost.org/trac/boost/ticket/4883 #4883]). +* Fixed a bug on kqueue-based platforms, where some system calls that + repeatedly fail with `EWOULDBLOCK` are not correctly re-registered with + kqueue.+* Changed `asio::streambuf` to ensure that its internal pointers are updated
+ correctly after the data has been modified using `std::streambuf` member + functions.+* Fixed a bug that prevented the linger socket option from working on platforms
+ other than Windows. + +[heading Asio 1.4.8 / Boost 1.46] + +* Fixed an integer overflow problem that occurs when + `ip::address_v4::broadcast()` is used on 64-bit platforms.+* Fixed a problem on older Linux kernels (where epoll is used without timerfd + support) that prevents timely delivery of deadline_timer handlers, after the
+ program has been running for some time + ([@https://svn.boost.org/trac/boost/ticket/5045 #5045]). + +[heading Asio 1.4.7 / Boost 1.45] + +* Fixed a problem on kqueue-based platforms where a `deadline_timer` may + never fire if the `io_service` is running in a background thread + ([@https://svn.boost.org/trac/boost/ticket/4568 #4568]). +* Fixed a const-correctness issue that prevented valid uses of + `has_service<>` from compiling + ([@https://svn.boost.org/trac/boost/ticket/4638 #4638]). +* Fixed MinGW cross-compilation + ([@https://svn.boost.org/trac/boost/ticket/4491 #4491]). +* Removed dependency on deprecated Boost.System functions + ([@https://svn.boost.org/trac/boost/ticket/4672 #4672]). +* Ensured `close()`\/`closesocket()` failures are correctly propagated + ([@https://svn.boost.org/trac/boost/ticket/4573 #4573]).+* Added a check for errors returned by `InitializeCriticalSectionAndSpinCount`
+ ([@https://svn.boost.org/trac/boost/ticket/4574 #4574]). +* Added support for hardware flow control on QNX + ([@https://svn.boost.org/trac/boost/ticket/4625 #4625]). +* Always use `pselect()` on HP-UX, if it is available + ([@https://svn.boost.org/trac/boost/ticket/4578 #4578]). +* Ensured handler arguments are passed as lvalues + ([@https://svn.boost.org/trac/boost/ticket/4744 #4744]). +* Fixed Windows build when thread support is disabled + ([@https://svn.boost.org/trac/boost/ticket/4680 #4680]).+* Fixed a Windows-specific problem where `deadline_timer` objects with expiry
+ times set more than 5 minutes in the future may never expire + ([@https://svn.boost.org/trac/boost/ticket/4745 #4745]).+* Fixed the `resolver` backend on BSD platforms so that an empty service name
+ resolves to port number `0`, as per the documentation + ([@https://svn.boost.org/trac/boost/ticket/4690 #4690]). +* Fixed read operations so that they do not accept buffer sequences of type+ `const_buffers_1` ([@https://svn.boost.org/trac/boost/ticket/4746 #4746]). +* Redefined `Protocol` and `id` to avoid clashing with Objective-C++ keywords
+ ([@https://svn.boost.org/trac/boost/ticket/4191 #4191]).+* Fixed a `vector` reallocation performance issue that can occur when there are
+ many active `deadline_timer` objects + ([@https://svn.boost.org/trac/boost/ticket/4780 #4780]). +* Fixed the kqueue backend so that it compiles on NetBSD + ([@https://svn.boost.org/trac/boost/ticket/4662 #4662]). +* Fixed the socket `io_control()` implementation on 64-bit Mac OS X and BSD + platforms ([@https://svn.boost.org/trac/boost/ticket/4782 #4782]). +* Fixed a Windows-specific problem where failures from `accept()` are + incorrectly treated as successes + ([@https://svn.boost.org/trac/boost/ticket/4859 #4859]). +* Deprecated the separate compilation header `<boost/asio/impl/src.cpp>` in + favour of `<boost/asio/impl/src.hpp>` + ([@https://svn.boost.org/trac/boost/ticket/4560 #4560]). + [heading Asio 1.4.6 / Boost 1.44]* Reduced compile times. (Note that some programs may need to add additional
======================================= --- /trunk/libs/asio/doc/index.xml Sun Feb 7 18:57:55 2010 +++ /trunk/libs/asio/doc/index.xml Tue Aug 23 20:21:16 2011 @@ -2,7 +2,7 @@<!DOCTYPE library PUBLIC "-//Boost//DTD BoostBook XML V1.0//EN" "../../../tools/boostbook/dtd/boostbook.dtd">
<!--- Copyright (c) 2003-2010 Christopher M. Kohlhoff (chris at kohlhoff dot com) + Copyright (c) 2003-2011 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) ======================================= --- /trunk/libs/asio/doc/noncopyable_dox.txt Sun Feb 7 18:57:55 2010 +++ /trunk/libs/asio/doc/noncopyable_dox.txt Tue Aug 23 20:21:16 2011 @@ -1,5 +1,5 @@ //-// Copyright (c) 2003-2010 Christopher M. Kohlhoff (chris at kohlhoff dot com) +// Copyright (c) 2003-2011 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) ======================================= --- /trunk/libs/asio/doc/overview/allocation.qbk Fri May 28 00:05:44 2010 +++ /trunk/libs/asio/doc/overview/allocation.qbk Tue Aug 23 20:21:16 2011 @@ -1,5 +1,5 @@ [/- / Copyright (c) 2003-2010 Christopher M. Kohlhoff (chris at kohlhoff dot com) + / Copyright (c) 2003-2011 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) @@ -48,11 +48,6 @@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: - -* Asynchronous SSL operations. - [heading See Also] [link boost_asio.reference.asio_handler_allocate asio_handler_allocate], ======================================= --- /trunk/libs/asio/doc/overview/async.qbk Sun Feb 7 18:57:55 2010 +++ /trunk/libs/asio/doc/overview/async.qbk Tue Aug 23 20:21:16 2011 @@ -1,5 +1,5 @@ [/- / Copyright (c) 2003-2010 Christopher M. Kohlhoff (chris at kohlhoff dot com) + / Copyright (c) 2003-2011 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) ======================================= --- /trunk/libs/asio/doc/overview/basics.qbk Sun Feb 7 18:57:55 2010 +++ /trunk/libs/asio/doc/overview/basics.qbk Tue Aug 23 20:21:16 2011 @@ -1,5 +1,5 @@ [/- / Copyright (c) 2003-2010 Christopher M. Kohlhoff (chris at kohlhoff dot com) + / Copyright (c) 2003-2011 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) @@ -43,13 +43,13 @@ 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 +5. The [*io_service] translates any error resulting from the operation into an +object of type `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; ======================================= --- /trunk/libs/asio/doc/overview/bsd_sockets.qbk Sun Feb 7 18:57:55 2010 +++ /trunk/libs/asio/doc/overview/bsd_sockets.qbk Tue Aug 23 20:21:16 2011 @@ -1,5 +1,5 @@ [/- / Copyright (c) 2003-2010 Christopher M. Kohlhoff (chris at kohlhoff dot com) + / Copyright (c) 2003-2011 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) ======================================= --- /trunk/libs/asio/doc/overview/buffers.qbk Sun Feb 7 18:57:55 2010 +++ /trunk/libs/asio/doc/overview/buffers.qbk Tue Aug 23 20:21:16 2011 @@ -1,5 +1,5 @@ [/- / Copyright (c) 2003-2010 Christopher M. Kohlhoff (chris at kohlhoff dot com) + / Copyright (c) 2003-2011 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) =======================================--- /trunk/libs/asio/doc/overview/implementation.qbk Sun Feb 7 18:57:55 2010 +++ /trunk/libs/asio/doc/overview/implementation.qbk Tue Aug 23 20:21:16 2011
@@ -1,5 +1,5 @@ [/- / Copyright (c) 2003-2010 Christopher M. Kohlhoff (chris at kohlhoff dot com) + / Copyright (c) 2003-2011 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) @@ -241,6 +241,10 @@ `io_service::run()`, `io_service::run_one()`, `io_service::poll()` or `io_service::poll_one()`.+* An additional thread per `io_service` is used to trigger timers. This thread
+is created on construction of the first `deadline_timer` or +`deadline_timer_service` objects. + * An additional thread per `io_service` is used for the `select`demultiplexing. This thread is created on the first call to `async_connect()`.
======================================= --- /trunk/libs/asio/doc/overview/iostreams.qbk Sun Feb 7 18:57:55 2010 +++ /trunk/libs/asio/doc/overview/iostreams.qbk Tue Aug 23 20:21:16 2011 @@ -1,5 +1,5 @@ [/- / Copyright (c) 2003-2010 Christopher M. Kohlhoff (chris at kohlhoff dot com) + / Copyright (c) 2003-2011 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) @@ -31,6 +31,32 @@ acceptor.accept(*stream.rdbuf()); ... } + +Timeouts may be set by calling `expires_at()` or `expires_from_now()` to+establish a deadline. Any socket operations that occur past the deadline will
+put the iostream into a "bad" state. + +For example, a simple client program like this: + + ip::tcp::iostream stream; + stream.expires_from_now(boost::posix_time::seconds(60)); + stream.connect("www.boost.org", "http"); + stream << "GET /LICENSE_1_0.txt HTTP/1.0\r\n"; + stream << "Host: www.boost.org\r\n"; + stream << "Accept: */*\r\n"; + stream << "Connection: close\r\n\r\n"; + stream.flush(); + std::cout << stream.rdbuf(); ++will fail if all the socket operations combined take longer than 60 seconds.
++If an error does occur, the iostream's `error()` member function may be used to
+retrieve the error code from the most recent system call: + + if (!stream) + { + std::cout << "Error: " << stream.error().message() << "\n"; + } [heading See Also] ======================================= --- /trunk/libs/asio/doc/overview/line_based.qbk Sun Feb 7 18:57:55 2010 +++ /trunk/libs/asio/doc/overview/line_based.qbk Tue Aug 23 20:21:16 2011 @@ -1,5 +1,5 @@ [/- / Copyright (c) 2003-2010 Christopher M. Kohlhoff (chris at kohlhoff dot com) + / Copyright (c) 2003-2011 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) ======================================= --- /trunk/libs/asio/doc/overview/posix.qbk Sun Feb 7 18:57:55 2010 +++ /trunk/libs/asio/doc/overview/posix.qbk Tue Aug 23 20:21:16 2011 @@ -1,5 +1,5 @@ [/- / Copyright (c) 2003-2010 Christopher M. Kohlhoff (chris at kohlhoff dot com) + / Copyright (c) 2003-2011 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) @@ -11,6 +11,8 @@[link boost_asio.overview.posix.stream_descriptor Stream-Oriented File Descriptors]
+[link boost_asio.overview.posix.fork Fork] + [section:local UNIX Domain Sockets]Boost.Asio provides basic support UNIX domain sockets (also known as local sockets).
@@ -101,6 +103,43 @@ target operating system. A program may test for the macro`BOOST_ASIO_HAS_POSIX_STREAM_DESCRIPTOR` to determine whether they are supported.
+[endsect] + +[section:fork Fork] ++Boost.Asio supports programs that utilise the `fork()` system call. Provided the +program calls `io_service.notify_fork()` at the appropriate times, Boost.Asio will
+recreate any internal file descriptors (such as the "self-pipe trick"+descriptor used for waking up a reactor). The notification is usually performed
+as follows: + + io_service_.notify_fork(boost::asio::io_service::fork_prepare); + if (fork() == 0) + { + io_service_.notify_fork(boost::asio::io_service::fork_child); + ... + } + else + { + io_service_.notify_fork(boost::asio::io_service::fork_parent); + ... + } + +User-defined services can also be made fork-aware by overriding the +`io_service::service::fork_service()` virtual function. ++Note that any file descriptors accessible via Boost.Asio's public API (e.g. the +descriptors underlying `basic_socket<>`, `posix::stream_descriptor`, etc.) are +not altered during a fork. It is the program's responsibility to manage these
+as required. + +[heading See Also] ++[link boost_asio.reference.io_service.notify_fork io_service::notify_fork()],
+[link boost_asio.reference.io_service.fork_event io_service::fork_event],+[link boost_asio.reference.io_service__service.fork_service io_service::service::fork_service()],
+[link boost_asio.examples.fork Fork examples]. + [endsect] [endsect] ======================================= --- /trunk/libs/asio/doc/overview/protocols.qbk Sun Feb 7 18:57:55 2010 +++ /trunk/libs/asio/doc/overview/protocols.qbk Tue Aug 23 20:21:16 2011 @@ -1,5 +1,5 @@ [/- / Copyright (c) 2003-2010 Christopher M. Kohlhoff (chris at kohlhoff dot com) + / Copyright (c) 2003-2011 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) @@ -26,10 +26,40 @@ }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 +so a program should 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:+To simplify the development of protocol-independent programs, TCP clients may +establish connections using the free functions [link boost_asio.reference.connect +connect()] and [link boost_asio.reference.async_connect async_connect()]. These
+operations try each endpoint in a list until the socket is successfully +connected. For example, a single call: + + ip::tcp::socket socket(my_io_service); + boost::asio::connect(socket, resolver.resolve(query)); + +will synchronously try all endpoints until one is successfully connected. +Similarly, an asynchronous connect may be performed by writing: + + boost::asio::async_connect(socket_, iter, + boost::bind(&client::handle_connect, this, + boost::asio::placeholders::error)); + + // ... + + void handle_connect(const error_code& error) + { + if (!error) + { + // Start read or write operations. + } + else + { + // Handle error. + } + } ++When a specific endpoint is available, a socket can be created and connected:
ip::tcp::socket socket(my_io_service); socket.connect(endpoint); ======================================= --- /trunk/libs/asio/doc/overview/rationale.qbk Sun Feb 7 18:57:55 2010 +++ /trunk/libs/asio/doc/overview/rationale.qbk Tue Aug 23 20:21:16 2011 @@ -1,5 +1,5 @@ [/- / Copyright (c) 2003-2010 Christopher M. Kohlhoff (chris at kohlhoff dot com) + / Copyright (c) 2003-2011 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) ======================================= --- /trunk/libs/asio/doc/overview/reactor.qbk Sun Feb 7 18:57:55 2010 +++ /trunk/libs/asio/doc/overview/reactor.qbk Tue Aug 23 20:21:16 2011 @@ -1,5 +1,5 @@ [/- / Copyright (c) 2003-2010 Christopher M. Kohlhoff (chris at kohlhoff dot com) + / Copyright (c) 2003-2011 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) @@ -18,8 +18,7 @@ ip::tcp::socket socket(my_io_service); ... - ip::tcp::socket::non_blocking nb(true); - socket.io_control(nb); + socket.non_blocking(true); ... socket.async_read_some(null_buffers(), read_handler); ... @@ -38,6 +37,8 @@ [heading See Also] [link boost_asio.reference.null_buffers null_buffers],+[link boost_asio.reference.basic_socket.non_blocking basic_socket::non_blocking()], +[link boost_asio.reference.basic_socket.native_non_blocking basic_socket::native_non_blocking()],
[link boost_asio.examples.nonblocking nonblocking example]. [endsect] ======================================= --- /trunk/libs/asio/doc/overview/serial_ports.qbk Fri May 28 00:05:44 2010 +++ /trunk/libs/asio/doc/overview/serial_ports.qbk Tue Aug 23 20:21:16 2011 @@ -1,5 +1,5 @@ [/- / Copyright (c) 2003-2010 Christopher M. Kohlhoff (chris at kohlhoff dot com) + / Copyright (c) 2003-2011 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) @@ -15,12 +15,11 @@where name is something like `"COM1"` on Windows, and `"/dev/ttyS0"` on POSIX
platforms. -Once opened, the serial port may be used as a [link-boost_asio.overview.core.streams 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+Once opened, the serial port may be used as a [link boost_asio.overview.core.streams
+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
======================================= --- /trunk/libs/asio/doc/overview/ssl.qbk Sun Feb 7 18:57:55 2010 +++ /trunk/libs/asio/doc/overview/ssl.qbk Tue Aug 23 20:21:16 2011 @@ -1,5 +1,5 @@ [/- / Copyright (c) 2003-2010 Christopher M. Kohlhoff (chris at kohlhoff dot com) + / Copyright (c) 2003-2011 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) @@ -16,8 +16,8 @@ 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); + ssl::context ctx(ssl::context::sslv23); + ctx.set_verify_mode(ssl::verify_peer); ctx.load_verify_file("ca.pem"); To use SSL with a TCP socket, one may write: @@ -41,9 +41,8 @@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.+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 @@ -52,15 +51,65 @@async_write()], [link boost_asio.reference.read_until read_until()] or [link
boost_asio.reference.async_read_until async_read_until()] free functions. +[heading Certificate Verification] ++Boost.Asio provides various methods for configuring the way SSL certificates are
+verified: ++* [link boost_asio.reference.ssl__context.set_default_verify_paths ssl::context::set_default_verify_paths()] +* [link boost_asio.reference.ssl__context.set_verify_mode ssl::context::set_verify_mode()] +* [link boost_asio.reference.ssl__context.set_verify_callback ssl::context::set_verify_callback()] +* [link boost_asio.reference.ssl__context.load_verify_file ssl::context::load_verify_file()] +* [link boost_asio.reference.ssl__stream.set_verify_mode ssl::stream::set_verify_mode()] +* [link boost_asio.reference.ssl__stream.set_verify_callback ssl::stream::set_verify_callback()]
++To simplify use cases where certificates are verified according to the rules in +RFC 2818 (certificate verification for HTTPS), Boost.Asio provides a reusable
+verification callback as a function object: ++* [link boost_asio.reference.ssl__rfc2818_verification ssl::rfc2818_verification]
+ +The following example shows verification of a remote host's certificate +according to the rules used by HTTPS: + + using boost::asio::ip::tcp; + namespace ssl = boost::asio::ssl; + typedef ssl::stream<tcp::socket> ssl_socket; + + // Create a context that uses the default paths for + // finding CA certificates. + ssl::context ctx(ssl::context::sslv23); + ctx.set_default_verify_paths(); + + // Open a socket and connect it to the remote host. + boost::asio::io_service io_service; + ssl_socket sock(io_service, ctx); + tcp::resolver resolver(io_service); + tcp::resolver::query query("host.name", "https"); + boost::asio::connect(sock.lowest_layer(), resolver.resolve(query)); + sock.lowest_layer().set_option(tcp::no_delay(true)); + + // Perform SSL handshake and verify the remote host's + // certificate. + sock.set_verify_mode(ssl::verify_peer); + sock.set_verify_callback(ssl::rfc2818_verification("host.name")); + sock.handshake(ssl_socket::client); + + // ... read and write as normal ... + +[heading SSL and Threads] ++SSL stream objects perform no locking of their own. Therefore, it is essential +that all asynchronous SSL operations are performed in an implicit or explicit +[link boost_asio.overview.core.strands strand]. Note that this means that no +synchronisation is required (and so no locking overhead is incurred) in single
+threaded programs. + [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__rfc2818_verification ssl::rfc2818_verification],
[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] @@ -68,7 +117,7 @@[@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 notwrapped 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()`].+boost_asio.reference.ssl__context.native_handle `ssl::context::native_handle()`] or +[link boost_asio.reference.ssl__stream.native_handle `ssl::stream::native_handle()`].
[endsect] ======================================= --- /trunk/libs/asio/doc/overview/strands.qbk Sun Feb 7 18:57:55 2010 +++ /trunk/libs/asio/doc/overview/strands.qbk Tue Aug 23 20:21:16 2011 @@ -1,5 +1,5 @@ [/- / Copyright (c) 2003-2010 Christopher M. Kohlhoff (chris at kohlhoff dot com) + / Copyright (c) 2003-2011 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) ======================================= --- /trunk/libs/asio/doc/overview/streams.qbk Sun Feb 7 18:57:55 2010 +++ /trunk/libs/asio/doc/overview/streams.qbk Tue Aug 23 20:21:16 2011 @@ -1,5 +1,5 @@ [/- / Copyright (c) 2003-2010 Christopher M. Kohlhoff (chris at kohlhoff dot com) + / Copyright (c) 2003-2011 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) ======================================= --- /trunk/libs/asio/doc/overview/threads.qbk Fri May 28 00:05:44 2010 +++ /trunk/libs/asio/doc/overview/threads.qbk Tue Aug 23 20:21:16 2011 @@ -1,5 +1,5 @@ [/- / Copyright (c) 2003-2010 Christopher M. Kohlhoff (chris at kohlhoff dot com) + / Copyright (c) 2003-2011 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) ======================================= --- /trunk/libs/asio/doc/overview/timers.qbk Sun Feb 7 18:57:55 2010 +++ /trunk/libs/asio/doc/overview/timers.qbk Tue Aug 23 20:21:16 2011 @@ -1,5 +1,5 @@ [/- / Copyright (c) 2003-2010 Christopher M. Kohlhoff (chris at kohlhoff dot com) + / Copyright (c) 2003-2011 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) @@ -33,7 +33,7 @@ ... i.run();-The deadline associated with a timer may be also be obtained as a relative time: +The deadline associated with a timer may also be obtained as a relative time:
boost::posix_time::time_duration time_until_expiry = t.expires_from_now(); ======================================= --- /trunk/libs/asio/doc/overview/windows.qbk Sun Feb 7 18:57:55 2010 +++ /trunk/libs/asio/doc/overview/windows.qbk Tue Aug 23 20:21:16 2011 @@ -1,5 +1,5 @@ [/- / Copyright (c) 2003-2010 Christopher M. Kohlhoff (chris at kohlhoff dot com) + / Copyright (c) 2003-2011 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) ======================================= --- /trunk/libs/asio/doc/overview.qbk Sun Feb 7 18:57:55 2010 +++ /trunk/libs/asio/doc/overview.qbk Tue Aug 23 20:21:16 2011 @@ -1,5 +1,5 @@ [/- / Copyright (c) 2003-2010 Christopher M. Kohlhoff (chris at kohlhoff dot com) + / Copyright (c) 2003-2011 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) @@ -18,19 +18,29 @@ * [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.core.handler_tracking Handler Tracking] * [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.signals Signal Handling] * [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.posix.fork Fork] * [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.cpp2011 C++ 2011 Support] + * [link boost_asio.overview.cpp2011.move_objects Movable I/O Objects] + * [link boost_asio.overview.cpp2011.move_handlers Movable Handlers] + * [link boost_asio.overview.cpp2011.variadic Variadic Templates] + * [link boost_asio.overview.cpp2011.array Array Container] + * [link boost_asio.overview.cpp2011.atomic Atomics] + * [link boost_asio.overview.cpp2011.shared_ptr Shared Pointers]* [link boost_asio.overview.implementation Platform-Specific Implementation Notes]
[include overview/rationale.qbk] @@ -46,6 +56,7 @@ * [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.core.handler_tracking Handler Tracking] [include overview/basics.qbk] [include overview/async.qbk] @@ -56,6 +67,7 @@ [include overview/reactor.qbk] [include overview/line_based.qbk] [include overview/allocation.qbk] +[include overview/handler_tracking.qbk] [endsect] @@ -73,9 +85,11 @@ [include overview/timers.qbk] [include overview/serial_ports.qbk] +[include overview/signals.qbk] [include overview/posix.qbk] [include overview/windows.qbk] [include overview/ssl.qbk] +[include overview/cpp2011.qbk] [include overview/implementation.qbk] [endsect] ======================================= --- /trunk/libs/asio/doc/quickref.xml Sun Feb 7 18:57:55 2010 +++ /trunk/libs/asio/doc/quickref.xml Tue Aug 23 20:21:16 2011 @@ -2,7 +2,7 @@<!DOCTYPE library PUBLIC "-//Boost//DTD BoostBook XML V1.0//EN" "../../../tools/boostbook/dtd/boostbook.dtd">
<!--- Copyright (c) 2003-2010 Christopher M. Kohlhoff (chris at kohlhoff dot com) + Copyright (c) 2003-2011 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) ======================================= --- /trunk/libs/asio/doc/reference.qbk Wed Aug 18 08:21:10 2010 +++ /trunk/libs/asio/doc/reference.qbk Tue Aug 23 20:21:16 2011 File is too large to display a diff. ======================================= --- /trunk/libs/asio/doc/reference.xsl Wed Aug 18 08:21:10 2010 +++ /trunk/libs/asio/doc/reference.xsl Tue Aug 23 20:21:16 2011 @@ -2,7 +2,7 @@<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) + Copyright (c) 2003-2011 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) @@ -26,7 +26,7 @@ --> <xsl:template match="/doxygen"> <xsl:text>[/- / Copyright (c) 2003-2010 Christopher M. Kohlhoff (chris at kohlhoff dot com) + / Copyright (c) 2003-2011 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) @@ -43,6 +43,7 @@ [include requirements/AsyncReadStream.qbk] [include requirements/AsyncWriteStream.qbk] [include requirements/CompletionHandler.qbk] +[include requirements/ComposedConnectHandler.qbk] [include requirements/ConnectHandler.qbk] [include requirements/ConstBufferSequence.qbk] [include requirements/ConvertibleToConstBuffer.qbk] @@ -54,6 +55,7 @@ [include requirements/GettableSocketOption.qbk] [include requirements/Handler.qbk] [include requirements/HandleService.qbk] +[include requirements/HandshakeHandler.qbk] [include requirements/InternetProtocol.qbk] [include requirements/IoControlCommand.qbk] [include requirements/IoObjectService.qbk] @@ -64,10 +66,14 @@ [include requirements/ReadHandler.qbk] [include requirements/ResolveHandler.qbk] [include requirements/ResolverService.qbk] +[include requirements/SeqPacketSocketService.qbk] [include requirements/SerialPortService.qbk] [include requirements/Service.qbk] [include requirements/SettableSerialPortOption.qbk] [include requirements/SettableSocketOption.qbk] +[include requirements/ShutdownHandler.qbk] +[include requirements/SignalHandler.qbk] +[include requirements/SignalSetService.qbk] [include requirements/SocketAcceptorService.qbk] [include requirements/SocketService.qbk] [include requirements/StreamDescriptorService.qbk] @@ -245,6 +251,18 @@select="concat(substring-before($name, ']'), '_rb_', 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, '('), '_lp_', 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, ')'), '_rp_', substring-after($name, ')'))"/>
+ </xsl:call-template> + </xsl:when> <xsl:when test="contains($name, '+')"> <xsl:call-template name="make-id"> <xsl:with-param name="name" @@ -633,16 +651,66 @@ <xsl:template match="ref[@kindref='member']" mode="markup"> - <xsl:text>`</xsl:text> - <xsl:value-of select="."/> - <xsl:text>`</xsl:text> + <xsl:variable name="dox-ref-id" select="@refid"/>+ <xsl:variable name="memberdefs" select="/doxygen//compounddef/sectiondef/memberdef[@id=$dox-ref-id]"/>
+ <xsl:choose>+ <xsl:when test="contains(@refid, 'namespaceboost_1_1asio') and count($memberdefs) > 0"> + <xsl:variable name="dox-compound-name" select="($memberdefs)[1]/../../compoundname"/>
+ <xsl:variable name="dox-name" select="($memberdefs)[1]/name"/> + <xsl:variable name="ref-name"> + <xsl:call-template name="strip-asio-ns">+ <xsl:with-param name="name" select="concat($dox-compound-name,'::',$dox-name)"/>
+ </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-nested"> - <xsl:text>`</xsl:text> - <xsl:value-of select="."/> - <xsl:text>`</xsl:text> + <xsl:variable name="dox-ref-id" select="@refid"/>+ <xsl:variable name="memberdefs" select="/doxygen//compounddef/sectiondef/memberdef[@id=$dox-ref-id]"/>
+ <xsl:choose>+ <xsl:when test="contains(@refid, 'namespaceboost_1_1asio') and count($memberdefs) > 0"> + <xsl:variable name="dox-compound-name" select="($memberdefs)[1]/../../compoundname"/>
+ <xsl:variable name="dox-name" select="($memberdefs)[1]/name"/> + <xsl:variable name="ref-name"> + <xsl:call-template name="strip-asio-ns">+ <xsl:with-param name="name" select="concat($dox-compound-name,'::',$dox-name)"/>
+ </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> @@ -876,6 +944,56 @@ ] </xsl:if> +<xsl:if test="$class-name = 'io_service::service'"> +<xsl:if test="count(sectiondef[@kind='private-func']) > 0"> +[heading Private Member Functions] +[table + [[Name][Description]]+<xsl:for-each select="sectiondef[@kind='private-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> +<xsl:if test="count(sectiondef[@kind='public-attrib' or @kind='public-static-attrib']) > 0">
[heading Data Members] [table @@ -1015,6 +1133,14 @@ <xsl:with-param name="class-id" select="$class-id"/> <xsl:with-param name="class-file" select="$class-file"/> </xsl:apply-templates> +<xsl:if test="$class-name = 'io_service::service'">+ <xsl:apply-templates select="sectiondef[@kind='private-func']/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:if> </xsl:template> @@ -1281,6 +1407,9 @@ <xsl:when test="declname = 'CompletionCondition'"> <xsl:value-of select="declname"/> </xsl:when> + <xsl:when test="declname = 'ConnectCondition'"> + <xsl:value-of select="declname"/> + </xsl:when> <xsl:when test="declname = 'Context_Service'"> <xsl:value-of select="declname"/> </xsl:when> @@ -1293,7 +1422,7 @@ <xsl:when test="declname = 'Function'"> <xsl:value-of select="declname"/> </xsl:when> - <xsl:when test="declname = 'HandshakeHandler'"> + <xsl:when test="declname = 'Iterator'"> <xsl:value-of select="declname"/> </xsl:when> <xsl:when test="declname = 'MatchCondition'"> @@ -1311,9 +1440,6 @@ <xsl:when test="declname = 'PointerToPodType'"> <xsl:value-of select="declname"/> </xsl:when> - <xsl:when test="declname = 'ShutdownHandler'"> - <xsl:value-of select="declname"/> - </xsl:when><xsl:when test="declname = 'SocketService1' or declname = 'SocketService2'"> <xsl:value-of select="concat('``[link boost_asio.reference.SocketService ', declname, ']``')"/>
</xsl:when> @@ -1338,6 +1464,9 @@ <xsl:when test="declname = 'Traits'"> <xsl:value-of select="declname"/> </xsl:when> + <xsl:when test="declname = 'VerifyCallback'"> + <xsl:value-of select="declname"/> + </xsl:when> <xsl:when test="count(declname) = 0"> </xsl:when> <xsl:otherwise> =======================================--- /trunk/libs/asio/doc/requirements/AcceptHandler.qbk Sun Feb 7 18:57:55 2010 +++ /trunk/libs/asio/doc/requirements/AcceptHandler.qbk Tue Aug 23 20:21:16 2011
@@ -1,5 +1,5 @@ [/- / Copyright (c) 2003-2010 Christopher M. Kohlhoff (chris at kohlhoff dot com) + / Copyright (c) 2003-2011 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) =======================================--- /trunk/libs/asio/doc/requirements/AsyncRandomAccessReadDevice.qbk Sun Feb 7 18:57:55 2010 +++ /trunk/libs/asio/doc/requirements/AsyncRandomAccessReadDevice.qbk Tue Aug 23 20:21:16 2011
@@ -1,5 +1,5 @@ [/- / Copyright (c) 2003-2010 Christopher M. Kohlhoff (chris at kohlhoff dot com) + / Copyright (c) 2003-2011 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) =======================================--- /trunk/libs/asio/doc/requirements/AsyncRandomAccessWriteDevice.qbk Sun Feb 7 18:57:55 2010 +++ /trunk/libs/asio/doc/requirements/AsyncRandomAccessWriteDevice.qbk Tue Aug 23 20:21:16 2011
@@ -1,5 +1,5 @@ [/- / Copyright (c) 2003-2010 Christopher M. Kohlhoff (chris at kohlhoff dot com) + / Copyright (c) 2003-2011 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) =======================================--- /trunk/libs/asio/doc/requirements/AsyncReadStream.qbk Sun Feb 7 18:57:55 2010 +++ /trunk/libs/asio/doc/requirements/AsyncReadStream.qbk Tue Aug 23 20:21:16 2011
@@ -1,5 +1,5 @@ [/- / Copyright (c) 2003-2010 Christopher M. Kohlhoff (chris at kohlhoff dot com) + / Copyright (c) 2003-2011 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) @@ -16,7 +16,7 @@ [table Buffer-oriented asynchronous read stream requirements [[operation] [type] [semantics, pre/post-conditions]] [ - [`a.io_service();`] + [`a.get_io_service();`] [`io_service&`] [Returns the `io_service` object through which the `async_read_some` handler `h` will be invoked.] @@ -27,7 +27,7 @@ [ 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 + object `a.get_io_service()` and behaves according to [link boost_asio.reference.asynchronous_operations asynchronous operation] requirements.\n \n =======================================--- /trunk/libs/asio/doc/requirements/AsyncWriteStream.qbk Sun Feb 7 18:57:55 2010 +++ /trunk/libs/asio/doc/requirements/AsyncWriteStream.qbk Tue Aug 23 20:21:16 2011
@@ -1,5 +1,5 @@ [/- / Copyright (c) 2003-2010 Christopher M. Kohlhoff (chris at kohlhoff dot com) + / Copyright (c) 2003-2011 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) @@ -15,7 +15,7 @@ [table Buffer-oriented asynchronous write stream requirements [[operation] [type] [semantics, pre/post-conditions]] [ - [`a.io_service();`] + [`a.get_io_service();`] [`io_service&`] [Returns the `io_service` object through which the `async_write_some` handler `h` will be invoked.] @@ -26,7 +26,7 @@ [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 + `a.get_io_service()` and behaves according to [link boost_asio.reference.asynchronous_operations asynchronous operation] requirements.\n \n =======================================--- /trunk/libs/asio/doc/requirements/CompletionHandler.qbk Sun Feb 7 18:57:55 2010 +++ /trunk/libs/asio/doc/requirements/CompletionHandler.qbk Tue Aug 23 20:21:16 2011
@@ -1,5 +1,5 @@ [/- / Copyright (c) 2003-2010 Christopher M. Kohlhoff (chris at kohlhoff dot com) + / Copyright (c) 2003-2011 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) =======================================--- /trunk/libs/asio/doc/requirements/ConnectHandler.qbk Sun Feb 7 18:57:55 2010 +++ /trunk/libs/asio/doc/requirements/ConnectHandler.qbk Tue Aug 23 20:21:16 2011
@@ -1,5 +1,5 @@ [/- / Copyright (c) 2003-2010 Christopher M. Kohlhoff (chris at kohlhoff dot com) + / Copyright (c) 2003-2011 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) =======================================--- /trunk/libs/asio/doc/requirements/ConstBufferSequence.qbk Sun Feb 7 18:57:55 2010 +++ /trunk/libs/asio/doc/requirements/ConstBufferSequence.qbk Tue Aug 23 20:21:16 2011
@@ -1,5 +1,5 @@ [/- / Copyright (c) 2003-2010 Christopher M. Kohlhoff (chris at kohlhoff dot com) + / Copyright (c) 2003-2011 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) =======================================--- /trunk/libs/asio/doc/requirements/ConvertibleToConstBuffer.qbk Sun Feb 7 18:57:55 2010 +++ /trunk/libs/asio/doc/requirements/ConvertibleToConstBuffer.qbk Tue Aug 23 20:21:16 2011
@@ -1,5 +1,5 @@ [/- / Copyright (c) 2003-2010 Christopher M. Kohlhoff (chris at kohlhoff dot com) + / Copyright (c) 2003-2011 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) =======================================--- /trunk/libs/asio/doc/requirements/ConvertibleToMutableBuffer.qbk Sun Feb 7 18:57:55 2010 +++ /trunk/libs/asio/doc/requirements/ConvertibleToMutableBuffer.qbk Tue Aug 23 20:21:16 2011
@@ -1,5 +1,5 @@ [/- / Copyright (c) 2003-2010 Christopher M. Kohlhoff (chris at kohlhoff dot com) + / Copyright (c) 2003-2011 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) =======================================--- /trunk/libs/asio/doc/requirements/DatagramSocketService.qbk Sun Feb 7 18:57:55 2010 +++ /trunk/libs/asio/doc/requirements/DatagramSocketService.qbk Tue Aug 23 20:21:16 2011
@@ -1,5 +1,5 @@ [/- / Copyright (c) 2003-2010 Christopher M. Kohlhoff (chris at kohlhoff dot com) + / Copyright (c) 2003-2011 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) @@ -48,7 +48,7 @@ \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+ `io_service` object `a.get_io_service()` and behaves according to [link
boost_asio.reference.asynchronous_operations asynchronous operation] requirements.\n \n @@ -95,7 +95,7 @@ \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+ `io_service` object `a.get_io_service()` and behaves according to [link
boost_asio.reference.asynchronous_operations asynchronous operation] requirements.\n \n @@ -145,7 +145,7 @@ \nInitiates 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 + object `a.get_io_service()` and behaves according to [link boost_asio.reference.asynchronous_operations asynchronous operation] requirements.\n \n @@ -198,7 +198,7 @@ \nInitiates 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 + object `a.get_io_service()` and behaves according to [link boost_asio.reference.asynchronous_operations asynchronous operation] requirements.\n \n ======================================= ***Additional files exist in this changeset.***