Home | Libraries | People | FAQ | More |
basic_waitable_timer
based around the C++11 clock type requirements. It may be used with the
clocks from the C++11 <chrono>
library facility or, if those are not available, Boost.Chrono. The typedefs
high_resolution_timer
,
steady_timer
and system_timer
may be used to create timer
objects for the standard clock types.
windows::object_handle
class for performing waits
on Windows kernel objects. Thanks go to Boris Schaeling for contributing
substantially to the development of this feature.
connect()
can return EAGAIN in certain circumstances. Remapped this to another error
so that it doesn't look like a non-blocking operation (#6048).
buffered_write_stream
(#6310).
io_service
is repeatedly run without
anything to do (#6321).
concurrency_hint
is 1) to eliminate a lock/unlock pair.
epoll_reactor
speculative operations to be performed without holding the lock.
epoll_reactor
's
I/O operation immediately before the corresponding handler is called.
This also improves scalability across CPUs when multiple threads
are running the io_service
.
boost::array
or std::array
) of exactly two buffers.
async_read_until
(#5688).
signal()
function from the global namespace (#5722).
deadline_timer
implementation so that it does not read the clock unless the timer heap
is non-empty.
null_buffers
operations so that they obey the user's non-blocking setting (#5756).
fd_set
at runtime when using Windows.
epoll_reactor
initialisation (#6006).
BOOST_ASIO_STRAND_IMPLEMENTATIONS
to
the desired number.
BOOST_ASIO_ENABLE_SEQUENTIAL_STRAND_ALLOCATION
flag which switches the allocation of strand implementations to use a round-robin
approach rather than hashing.
strand.post()
is used.
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
#2879.
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).
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.
error()
member function to socket iostreams, for retrieving the error code from
the most recent system call.
basic_deadline_timer::cancel_one()
function. This function lets you cancel
a single waiting handler on a timer. Handlers are cancelled in FIFO order.
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.
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.
buffer_size()
function so that it works for buffer
sequences in addition to individual buffers.
buffer_copy()
function that can be used to copy the
raw bytes between individual buffers and buffer sequences.
read()
, read_at()
, write()
and write_at()
that do not require a completion condition.
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
.
BOOST_ASIO_ENABLE_OLD_SSL
.
Addresses #3702,
#3958.
boost/asio/ssl/impl/src.hpp
in one source file in your program.
is_loopback()
,
is_unspecified()
and is_multicast()
functions consistently available across the ip::address
,
ip::address_v4
and ip::address_v6
classes (#3939).
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.
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.
io_control()
member function for socket acceptors (#3297).
release()
member function to posix descriptors. This function releases ownership
of the underlying native descriptor to the caller. Addresses #3900.
SOCK_SEQPACKET
).
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()
).
native_type
typedefs in favour of native_handle_type
, and the native()
member functions in favour of native_handle()
.
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 #3238,
#4162.
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 #3307.
asio::buffer()
overloads for std::array
, when available.
array
, shared_ptr
,
weak_ptr
and atomic
when they are available, rather
than the Boost equivalents.
what()
messages.
shutdown_service()
member functions to be private.
ip::basic_endpoint<>
objects (such as ip::tcp::endpoint
and ip::udp::endpoint
).
assign()
may have been dup()
-ed,
and so require explicit deregistration from the reactor (#4971).
io_service()
. The get_io_service()
member functions should be used instead.
resolver_query
and resolver_iterator
from
the ip::tcp
, ip::udp
and ip::icmp
classes.
buffers_iterator<>
and ip::basic_resolver_iterator
classes so that the value_type typedefs are non-const byte types.
-Wshadow
compiler option
(#3905).
FIONBIO
constant to int, to suppress a compiler warning on some platforms (#5128).
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 (#5418).
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
(#5021).
g++
due
to the use of anonymous enums (#4883).
EWOULDBLOCK
are
not correctly re-registered with kqueue.
asio::streambuf
to ensure that its internal
pointers are updated correctly after the data has been modified using
std::streambuf
member functions.
ip::address_v4::broadcast()
is used on 64-bit platforms.
deadline_timer
may never fire if the io_service
is running in a background thread (#4568).
has_service<>
from compiling (#4638).
close()
/closesocket()
failures are correctly propagated (#4573).
InitializeCriticalSectionAndSpinCount
(#4574).
pselect()
on HP-UX, if it is available (#4578).
deadline_timer
objects with expiry times set more than 5 minutes in the future may never
expire (#4745).
resolver
backend
on BSD platforms so that an empty service name resolves to port number
0
, as per the documentation
(#4690).
const_buffers_1
(#4746).
Protocol
and
id
to avoid clashing with
Objective-C++ keywords (#4191).
vector
reallocation
performance issue that can occur when there are many active deadline_timer
objects (#4780).
io_control()
implementation on 64-bit Mac OS X and
BSD platforms (#4782).
accept()
are incorrectly treated as successes
(#4859).
<boost/asio/impl/src.cpp>
in favour of <boost/asio/impl/src.hpp>
(#4560).
#include
s, e.g. if the
program uses boost::array
but does not explicitly include
<boost/array.hpp>
.)
deadline_timer
implementation to improve performance.
asio::streambuf
with async_read()
and async_read_until()
.
These read operations now use the existing capacity of the streambuf
when reading, rather than limiting
the read to 512 bytes.
#include
<boost/asio/impl/src.cpp>
to one source file in a program, then
build the program with BOOST_ASIO_SEPARATE_COMPILATION
defined in the project/compiler settings. Alternatively, BOOST_ASIO_DYN_LINK
may be defined to
build a separately-compiled Asio as part of a shared library.
BOOST_ASIO_DISABLE_FENCED_BLOCK
to permit the disabling of memory fences around completion handlers, even
if thread support is enabled.
const
types.
null_buffers
variant of async_send_to
(#4170).
unsigned char
is used with isdigit
in
getaddrinfo
emulation (#4201).
operator+
overload in buffers_iterator
(#4382).
null_buffers
operations on Windows.
timerfd
for dispatching timers on Linux, when available.
ip::resolver_query_base::flags
as per the TR2 proposal. This type prevents implicit conversion from int
to flags
,
allowing the compiler to catch cases where users incorrectly pass a numeric
port number as the service name.
#define NOMINMAX
for all Windows compilers. Users can define BOOST_ASIO_NO_NOMINMAX
to suppress this definition (#3901).
error::eof
result to the completion handler
(#4023).
io_control()
member functions to always call ioctl
on the underlying descriptor when
modifying blocking mode (#3307).
InternetProtocol::resolver_query
and InternetProtocol::resolver_iterator
,
as neither typedef is part of the documented InternetProtocol
requirements. The corresponding typedefs in the ip::tcp
,
ip::udp
and ip::icmp
classes have been deprecated.
select()
.
BOOST_ASIO_DISABLE_THREADS
macro that allows Asio's threading support to be independently disabled.
boost::addressof
to get the address of handler objects, rather than applying operator&
directly (#2977).
OVERLAPPED
structure
to be valid until both the initiating function call has returned and the
completion packet has been delivered.
boost_
prefix to
the extern "C"
thread entry point function (#3809).
getaddrinfo
emulation,
only check the socket type (SOCK_STREAM
or SOCK_DGRAM
) if a service
name has been specified. This should allow the emulation to work with raw
sockets.
buffered*_stream<>
templates to treat 0-byte reads and writes as no-ops, to comply with the
documented type requirements for SyncReadStream
,
AsyncReadStream
, SyncWriteStream
and AsyncWriteStream
.
throw
keyword to boost::throw_exception()
to allow Asio to be used when exception support is disabled. Note that
the SSL wrappers still require exception support (#2754).
/dev/poll
backend.
_GLIBCXX_DEBUG
is defined (#3098).
BOOST_ASIO_HASH_MAP_BUCKETS
may be used
to tweak the sizes used for the bucket arrays. (N.B. this feature introduced
a bug which was fixed in Asio 1.4.3 / Boost 1.40.)
io_control()
so that it adheres to the documented
type requirements for IoControlCommand (#2820).
ReadFile
call fails with ERROR_MORE_DATA
. This enables a hack
where a windows::stream_handle
can be used with a message-oriented
named pipe (#2936).
BOOST_ASIO_DISABLE_SERIAL_PORT
is defined (#2917).
windows::overlapped_ptr::complete()
are correctly passed to the completion
handler (#2614).
size_t
CompletionCondition(error_code ec, size_t total)
,
where the return value indicates the maximum number of bytes to be transferred
on the next read or write operation. (The old CompletionCondition signature
is still supported for backwards compatibility).
HANDLE
s
such as named pipes (requires HANDLE
s
that work with I/O completion ports).
HANDLE
s
such as files (requires HANDLE
s
that work with I/O completion ports).
null_buffers
type.
read_until()
and async_read_until()
overloads that take a user-defined function object for locating message
boundaries.
BOOST_ASIO_ENABLE_TWO_LOCK_QUEUE
) that
may provide better io_service
scalability across many processors.
First release of Asio as part of Boost.