This change adds a new set of type requirements for dynamic buffers,
DynamicBuffer_v2, which supports copy construction. These new type
requirements enable dynamic buffers to be used as arguments to
user-defined composed operations, where the same dynamic buffer object
is used repeatedly for multiple underlying operations. For example:
template <typename DynamicBuffer>
void echo_line(tcp::socket& sock, DynamicBuffer buf)
{
n = boost::asio::read_until(sock, buf, '\n');
boost::asio::write(sock, buf, boost::asio::transfer_exactly(n));
}
The original DynamicBuffer type requirements have been renamed to
DynamicBuffer_v1.
New type traits is_dynamic_buffer_v1 and is_dynamic_buffer_v2 have been
added to test for conformance to DynamicBuffer_v1 and DynamicBuffer_v2
respectively. The existing is_dynamic_buffer trait has been retained and
delegates to is_dynamic_buffer_v1, unless BOOST_ASIO_NO_DYNAMIC_BUFFER_V1
is defined, in which case it delegates to is_dynamic_buffer_v2.
The dynamic_string_buffer and dynamic_vector buffer classes conform to
both DynamicBuffer_v1 and DynamicBuffer_v2 requirements.
When BOOST_ASIO_NO_DYNAMIC_BUFFER_V1 is defined, all support for
DynamicBuffer_v1 types and functions is #ifdef-ed out. Support for using
basic_streambuf with the read, async_read, read_until, async_read_until,
write, and async_write functions is also disabled as a consequence.
This change should have no impact on existing source code that simply
uses dynamic buffers in conjunction with asio's composed operations,
such as:
string data;
// ...
size_t n = boost::asio::read_until(my_socket
boost::asio::dynamic_buffer(data, MY_MAX),
'\n');
* 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.
* 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. Checking may be
disabled by defining BOOST_ASIO_DISABLE_HANDLER_TYPE_REQUIREMENTS.
* Made the is_loopback(), is_unspecified() and is_multicast() functions
consistently available across the ip::address, ip::address_v4 and
ip::address_v6 classes. Refs #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. Refs #3307.
* Added the io_control() member function for socket acceptors.
Refs #3297.
* 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 a release() member function to posix descriptors. This function
releases ownership of the underlying native descriptor to the caller.
Refs #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()).
* Reduced the copying of handler function objects.
* Added support for C++0x move construction to further reduce copying of
handler objects. Move support is enabled when compiling in -std=c++0x
mode on g++ 4.5 or higher, or when using MSVC10.
* Removed the dependency on OS-provided macros for the well-known IPv4
and IPv6 addresses. This should eliminate the annoying "missing braces
around initializer" warnings. Refs #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. Refs #4971.
* Changed the SSL error category to return error strings from the
OpenSSL library.
* Changed the separate compilation support such that, to use Asio's SSL
capabilities, you should also include 'asio/ssl/impl/src.hpp in one
source file in your program.
* 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.
* Fixed a compile error on some versions of g++ due to anonymous enums.
Refs #4883.
* Added an explicit cast to the FIONBIO constant to int to suppress a
compiler warning on some platforms. Refs #5128.
* Fixed warnings reported by g++'s -Wshadow compiler option. Refs #3905.
[SVN r69194]
- It is now evaluated before the first call to the underlying
*_some() operation, as well as after every operation.
- The return value is a number of bytes, which indicates the maximum
length to be transferred on the subsequent *_some() operation. If
the return value is 0 then the composed operation completes.
Add missing unit tests for read_at and write_at.
[SVN r48418]
Make basic_io_object constructor protected.
Make a 0-length send or receive on a stream socket into a no-op.
Add cancel() function for cancelling asynchronous socket operations.
The Win32 implementation only works if all operations for the socket
have been issued from the same thread, otherwise it fails with
asio::error::not_supported.
Add workaround for an apparent Windows bug where using getpeername on
a socket accepted using AcceptEx will sometimes return an endpoint
that is all zeroes.
Make a strand last as long as it has any handlers to dispatch. Make
strand a nested class of io_service.
Add io_service() function to io_service::work to return a reference to
the io_service object on which the work is being performed. Renamed
io_service::service::owner() to io_service::service::io_service().
Unset linger object when socket objects are destroyed.
Rename asio_handler_dispatch to asio_handler_invoke.
Rename basic_socketbuf to basic_socket_streambuf.
Update ip::address_v4 and ip::address_v6 classes to match TR2
proposal.
Add run_one(), poll() and poll_one() functions to the io_service.
Remove need to #define FD_SETSIZE on Win32.
Add detection of incorrect inclusion of WinSock.h.
Fix some SSL bugs. Add ability to customise the SSL password callback
function.
Set the reuse_address option by default on acceptors.
The macros FIONREAD and FIONBIO are not integer constants on all
platforms, and so cannot be used as template arguments. Make the
corresponding I/O control commands into proper classes, not templates.
Fixes to better support *BSD platforms.
Add support for buffer debugging, if the standard library supports
iterator debugging (as MSVC8's standard lib does).
Ensure the IOCP queue is drained correctly at shutdown.
Move basic_resolver and resolver service into the ip namespace.
Fix some issues found by the inspect tool.
[SVN r35833]