mirror of
https://github.com/boostorg/asio.git
synced 2026-01-26 18:22:09 +00:00
Use a cached success error code to avoid touching the category singleton.
This commit is contained in:
@@ -37,9 +37,11 @@ template <typename MutableBufferSequence>
|
||||
class descriptor_read_op_base : public reactor_op
|
||||
{
|
||||
public:
|
||||
descriptor_read_op_base(int descriptor,
|
||||
const MutableBufferSequence& buffers, func_type complete_func)
|
||||
: reactor_op(&descriptor_read_op_base::do_perform, complete_func),
|
||||
descriptor_read_op_base(const boost::system::error_code& success_ec,
|
||||
int descriptor, const MutableBufferSequence& buffers,
|
||||
func_type complete_func)
|
||||
: reactor_op(success_ec,
|
||||
&descriptor_read_op_base::do_perform, complete_func),
|
||||
descriptor_(descriptor),
|
||||
buffers_(buffers)
|
||||
{
|
||||
@@ -74,9 +76,10 @@ class descriptor_read_op
|
||||
public:
|
||||
BOOST_ASIO_DEFINE_HANDLER_PTR(descriptor_read_op);
|
||||
|
||||
descriptor_read_op(int descriptor, const MutableBufferSequence& buffers,
|
||||
descriptor_read_op(const boost::system::error_code& success_ec,
|
||||
int descriptor, const MutableBufferSequence& buffers,
|
||||
Handler& handler, const IoExecutor& io_ex)
|
||||
: descriptor_read_op_base<MutableBufferSequence>(
|
||||
: descriptor_read_op_base<MutableBufferSequence>(success_ec,
|
||||
descriptor, buffers, &descriptor_read_op::do_complete),
|
||||
handler_(BOOST_ASIO_MOVE_CAST(Handler)(handler)),
|
||||
io_executor_(io_ex)
|
||||
|
||||
@@ -37,9 +37,11 @@ template <typename ConstBufferSequence>
|
||||
class descriptor_write_op_base : public reactor_op
|
||||
{
|
||||
public:
|
||||
descriptor_write_op_base(int descriptor,
|
||||
const ConstBufferSequence& buffers, func_type complete_func)
|
||||
: reactor_op(&descriptor_write_op_base::do_perform, complete_func),
|
||||
descriptor_write_op_base(const boost::system::error_code& success_ec,
|
||||
int descriptor, const ConstBufferSequence& buffers,
|
||||
func_type complete_func)
|
||||
: reactor_op(success_ec,
|
||||
&descriptor_write_op_base::do_perform, complete_func),
|
||||
descriptor_(descriptor),
|
||||
buffers_(buffers)
|
||||
{
|
||||
@@ -74,9 +76,10 @@ class descriptor_write_op
|
||||
public:
|
||||
BOOST_ASIO_DEFINE_HANDLER_PTR(descriptor_write_op);
|
||||
|
||||
descriptor_write_op(int descriptor, const ConstBufferSequence& buffers,
|
||||
descriptor_write_op(const boost::system::error_code& success_ec,
|
||||
int descriptor, const ConstBufferSequence& buffers,
|
||||
Handler& handler, const IoExecutor& io_ex)
|
||||
: descriptor_write_op_base<ConstBufferSequence>(
|
||||
: descriptor_write_op_base<ConstBufferSequence>(success_ec,
|
||||
descriptor, buffers, &descriptor_write_op::do_complete),
|
||||
handler_(BOOST_ASIO_MOVE_CAST(Handler)(handler)),
|
||||
io_executor_(io_ex)
|
||||
|
||||
@@ -90,7 +90,8 @@ class signal_set_service::pipe_read_op : public reactor_op
|
||||
{
|
||||
public:
|
||||
pipe_read_op()
|
||||
: reactor_op(&pipe_read_op::do_perform, pipe_read_op::do_complete)
|
||||
: reactor_op(boost::system::error_code(),
|
||||
&pipe_read_op::do_perform, pipe_read_op::do_complete)
|
||||
{
|
||||
}
|
||||
|
||||
|
||||
@@ -202,7 +202,7 @@ public:
|
||||
typedef reactive_wait_op<Handler, IoExecutor> op;
|
||||
typename op::ptr p = { boost::asio::detail::addressof(handler),
|
||||
op::ptr::allocate(handler), 0 };
|
||||
p.p = new (p.v) op(handler, io_ex);
|
||||
p.p = new (p.v) op(success_ec_, handler, io_ex);
|
||||
|
||||
BOOST_ASIO_HANDLER_CREATION((reactor_.context(), *p.p, "descriptor",
|
||||
&impl, impl.descriptor_, "async_wait"));
|
||||
@@ -266,7 +266,7 @@ public:
|
||||
typedef descriptor_write_op<ConstBufferSequence, Handler, IoExecutor> op;
|
||||
typename op::ptr p = { boost::asio::detail::addressof(handler),
|
||||
op::ptr::allocate(handler), 0 };
|
||||
p.p = new (p.v) op(impl.descriptor_, buffers, handler, io_ex);
|
||||
p.p = new (p.v) op(success_ec_, impl.descriptor_, buffers, handler, io_ex);
|
||||
|
||||
BOOST_ASIO_HANDLER_CREATION((reactor_.context(), *p.p, "descriptor",
|
||||
&impl, impl.descriptor_, "async_write_some"));
|
||||
@@ -289,7 +289,7 @@ public:
|
||||
typedef reactive_null_buffers_op<Handler, IoExecutor> op;
|
||||
typename op::ptr p = { boost::asio::detail::addressof(handler),
|
||||
op::ptr::allocate(handler), 0 };
|
||||
p.p = new (p.v) op(handler, io_ex);
|
||||
p.p = new (p.v) op(success_ec_, handler, io_ex);
|
||||
|
||||
BOOST_ASIO_HANDLER_CREATION((reactor_.context(), *p.p, "descriptor",
|
||||
&impl, impl.descriptor_, "async_write_some(null_buffers)"));
|
||||
@@ -335,7 +335,7 @@ public:
|
||||
typedef descriptor_read_op<MutableBufferSequence, Handler, IoExecutor> op;
|
||||
typename op::ptr p = { boost::asio::detail::addressof(handler),
|
||||
op::ptr::allocate(handler), 0 };
|
||||
p.p = new (p.v) op(impl.descriptor_, buffers, handler, io_ex);
|
||||
p.p = new (p.v) op(success_ec_, impl.descriptor_, buffers, handler, io_ex);
|
||||
|
||||
BOOST_ASIO_HANDLER_CREATION((reactor_.context(), *p.p, "descriptor",
|
||||
&impl, impl.descriptor_, "async_read_some"));
|
||||
@@ -358,7 +358,7 @@ public:
|
||||
typedef reactive_null_buffers_op<Handler, IoExecutor> op;
|
||||
typename op::ptr p = { boost::asio::detail::addressof(handler),
|
||||
op::ptr::allocate(handler), 0 };
|
||||
p.p = new (p.v) op(handler, io_ex);
|
||||
p.p = new (p.v) op(success_ec_, handler, io_ex);
|
||||
|
||||
BOOST_ASIO_HANDLER_CREATION((reactor_.context(), *p.p, "descriptor",
|
||||
&impl, impl.descriptor_, "async_read_some(null_buffers)"));
|
||||
@@ -374,6 +374,9 @@ private:
|
||||
|
||||
// The selector that performs event demultiplexing for the service.
|
||||
reactor& reactor_;
|
||||
|
||||
// Cached success value to avoid accessing category singleton.
|
||||
const boost::system::error_code success_ec_;
|
||||
};
|
||||
|
||||
} // namespace detail
|
||||
|
||||
@@ -34,8 +34,9 @@ class reactive_null_buffers_op : public reactor_op
|
||||
public:
|
||||
BOOST_ASIO_DEFINE_HANDLER_PTR(reactive_null_buffers_op);
|
||||
|
||||
reactive_null_buffers_op(Handler& handler, const IoExecutor& io_ex)
|
||||
: reactor_op(&reactive_null_buffers_op::do_perform,
|
||||
reactive_null_buffers_op(const boost::system::error_code& success_ec,
|
||||
Handler& handler, const IoExecutor& io_ex)
|
||||
: reactor_op(success_ec, &reactive_null_buffers_op::do_perform,
|
||||
&reactive_null_buffers_op::do_complete),
|
||||
handler_(BOOST_ASIO_MOVE_CAST(Handler)(handler)),
|
||||
io_executor_(io_ex)
|
||||
|
||||
@@ -34,10 +34,12 @@ template <typename Socket, typename Protocol>
|
||||
class reactive_socket_accept_op_base : public reactor_op
|
||||
{
|
||||
public:
|
||||
reactive_socket_accept_op_base(socket_type socket,
|
||||
socket_ops::state_type state, Socket& peer, const Protocol& protocol,
|
||||
typename Protocol::endpoint* peer_endpoint, func_type complete_func)
|
||||
: reactor_op(&reactive_socket_accept_op_base::do_perform, complete_func),
|
||||
reactive_socket_accept_op_base(const boost::system::error_code& success_ec,
|
||||
socket_type socket, socket_ops::state_type state, Socket& peer,
|
||||
const Protocol& protocol, typename Protocol::endpoint* peer_endpoint,
|
||||
func_type complete_func)
|
||||
: reactor_op(success_ec,
|
||||
&reactive_socket_accept_op_base::do_perform, complete_func),
|
||||
socket_(socket),
|
||||
state_(state),
|
||||
peer_(peer),
|
||||
@@ -94,12 +96,13 @@ class reactive_socket_accept_op :
|
||||
public:
|
||||
BOOST_ASIO_DEFINE_HANDLER_PTR(reactive_socket_accept_op);
|
||||
|
||||
reactive_socket_accept_op(socket_type socket,
|
||||
socket_ops::state_type state, Socket& peer, const Protocol& protocol,
|
||||
typename Protocol::endpoint* peer_endpoint, Handler& handler,
|
||||
const IoExecutor& io_ex)
|
||||
: reactive_socket_accept_op_base<Socket, Protocol>(socket, state, peer,
|
||||
protocol, peer_endpoint, &reactive_socket_accept_op::do_complete),
|
||||
reactive_socket_accept_op(const boost::system::error_code& success_ec,
|
||||
socket_type socket, socket_ops::state_type state, Socket& peer,
|
||||
const Protocol& protocol, typename Protocol::endpoint* peer_endpoint,
|
||||
Handler& handler, const IoExecutor& io_ex)
|
||||
: reactive_socket_accept_op_base<Socket, Protocol>(
|
||||
success_ec, socket, state, peer, protocol, peer_endpoint,
|
||||
&reactive_socket_accept_op::do_complete),
|
||||
handler_(BOOST_ASIO_MOVE_CAST(Handler)(handler)),
|
||||
io_executor_(io_ex)
|
||||
{
|
||||
@@ -160,13 +163,14 @@ class reactive_socket_move_accept_op :
|
||||
public:
|
||||
BOOST_ASIO_DEFINE_HANDLER_PTR(reactive_socket_move_accept_op);
|
||||
|
||||
reactive_socket_move_accept_op(const PeerIoExecutor& peer_io_ex,
|
||||
socket_type socket, socket_ops::state_type state,
|
||||
const Protocol& protocol, typename Protocol::endpoint* peer_endpoint,
|
||||
Handler& handler, const IoExecutor& io_ex)
|
||||
reactive_socket_move_accept_op(const boost::system::error_code& success_ec,
|
||||
const PeerIoExecutor& peer_io_ex, socket_type socket,
|
||||
socket_ops::state_type state, const Protocol& protocol,
|
||||
typename Protocol::endpoint* peer_endpoint, Handler& handler,
|
||||
const IoExecutor& io_ex)
|
||||
: peer_socket_type(peer_io_ex),
|
||||
reactive_socket_accept_op_base<peer_socket_type, Protocol>(
|
||||
socket, state, *this, protocol, peer_endpoint,
|
||||
success_ec, socket, state, *this, protocol, peer_endpoint,
|
||||
&reactive_socket_move_accept_op::do_complete),
|
||||
handler_(BOOST_ASIO_MOVE_CAST(Handler)(handler)),
|
||||
io_executor_(io_ex)
|
||||
|
||||
@@ -32,8 +32,10 @@ namespace detail {
|
||||
class reactive_socket_connect_op_base : public reactor_op
|
||||
{
|
||||
public:
|
||||
reactive_socket_connect_op_base(socket_type socket, func_type complete_func)
|
||||
: reactor_op(&reactive_socket_connect_op_base::do_perform, complete_func),
|
||||
reactive_socket_connect_op_base(const boost::system::error_code& success_ec,
|
||||
socket_type socket, func_type complete_func)
|
||||
: reactor_op(success_ec,
|
||||
&reactive_socket_connect_op_base::do_perform, complete_func),
|
||||
socket_(socket)
|
||||
{
|
||||
}
|
||||
@@ -61,9 +63,9 @@ class reactive_socket_connect_op : public reactive_socket_connect_op_base
|
||||
public:
|
||||
BOOST_ASIO_DEFINE_HANDLER_PTR(reactive_socket_connect_op);
|
||||
|
||||
reactive_socket_connect_op(socket_type socket,
|
||||
Handler& handler, const IoExecutor& io_ex)
|
||||
: reactive_socket_connect_op_base(socket,
|
||||
reactive_socket_connect_op(const boost::system::error_code& success_ec,
|
||||
socket_type socket, Handler& handler, const IoExecutor& io_ex)
|
||||
: reactive_socket_connect_op_base(success_ec, socket,
|
||||
&reactive_socket_connect_op::do_complete),
|
||||
handler_(BOOST_ASIO_MOVE_CAST(Handler)(handler)),
|
||||
io_executor_(io_ex)
|
||||
|
||||
@@ -33,10 +33,12 @@ template <typename MutableBufferSequence>
|
||||
class reactive_socket_recv_op_base : public reactor_op
|
||||
{
|
||||
public:
|
||||
reactive_socket_recv_op_base(socket_type socket,
|
||||
socket_ops::state_type state, const MutableBufferSequence& buffers,
|
||||
reactive_socket_recv_op_base(const boost::system::error_code& success_ec,
|
||||
socket_type socket, socket_ops::state_type state,
|
||||
const MutableBufferSequence& buffers,
|
||||
socket_base::message_flags flags, func_type complete_func)
|
||||
: reactor_op(&reactive_socket_recv_op_base::do_perform, complete_func),
|
||||
: reactor_op(success_ec,
|
||||
&reactive_socket_recv_op_base::do_perform, complete_func),
|
||||
socket_(socket),
|
||||
state_(state),
|
||||
buffers_(buffers),
|
||||
@@ -95,11 +97,12 @@ class reactive_socket_recv_op :
|
||||
public:
|
||||
BOOST_ASIO_DEFINE_HANDLER_PTR(reactive_socket_recv_op);
|
||||
|
||||
reactive_socket_recv_op(socket_type socket, socket_ops::state_type state,
|
||||
reactive_socket_recv_op(const boost::system::error_code& success_ec,
|
||||
socket_type socket, socket_ops::state_type state,
|
||||
const MutableBufferSequence& buffers, socket_base::message_flags flags,
|
||||
Handler& handler, const IoExecutor& io_ex)
|
||||
: reactive_socket_recv_op_base<MutableBufferSequence>(socket, state,
|
||||
buffers, flags, &reactive_socket_recv_op::do_complete),
|
||||
: reactive_socket_recv_op_base<MutableBufferSequence>(success_ec, socket,
|
||||
state, buffers, flags, &reactive_socket_recv_op::do_complete),
|
||||
handler_(BOOST_ASIO_MOVE_CAST(Handler)(handler)),
|
||||
io_executor_(io_ex)
|
||||
{
|
||||
|
||||
@@ -33,10 +33,12 @@ template <typename MutableBufferSequence, typename Endpoint>
|
||||
class reactive_socket_recvfrom_op_base : public reactor_op
|
||||
{
|
||||
public:
|
||||
reactive_socket_recvfrom_op_base(socket_type socket, int protocol_type,
|
||||
reactive_socket_recvfrom_op_base(const boost::system::error_code& success_ec,
|
||||
socket_type socket, int protocol_type,
|
||||
const MutableBufferSequence& buffers, Endpoint& endpoint,
|
||||
socket_base::message_flags flags, func_type complete_func)
|
||||
: reactor_op(&reactive_socket_recvfrom_op_base::do_perform, complete_func),
|
||||
: reactor_op(success_ec,
|
||||
&reactive_socket_recvfrom_op_base::do_perform, complete_func),
|
||||
socket_(socket),
|
||||
protocol_type_(protocol_type),
|
||||
buffers_(buffers),
|
||||
@@ -84,12 +86,13 @@ class reactive_socket_recvfrom_op :
|
||||
public:
|
||||
BOOST_ASIO_DEFINE_HANDLER_PTR(reactive_socket_recvfrom_op);
|
||||
|
||||
reactive_socket_recvfrom_op(socket_type socket, int protocol_type,
|
||||
reactive_socket_recvfrom_op(const boost::system::error_code& success_ec,
|
||||
socket_type socket, int protocol_type,
|
||||
const MutableBufferSequence& buffers, Endpoint& endpoint,
|
||||
socket_base::message_flags flags, Handler& handler,
|
||||
const IoExecutor& io_ex)
|
||||
: reactive_socket_recvfrom_op_base<MutableBufferSequence, Endpoint>(
|
||||
socket, protocol_type, buffers, endpoint, flags,
|
||||
success_ec, socket, protocol_type, buffers, endpoint, flags,
|
||||
&reactive_socket_recvfrom_op::do_complete),
|
||||
handler_(BOOST_ASIO_MOVE_CAST(Handler)(handler)),
|
||||
io_executor_(io_ex)
|
||||
|
||||
@@ -34,10 +34,12 @@ template <typename MutableBufferSequence>
|
||||
class reactive_socket_recvmsg_op_base : public reactor_op
|
||||
{
|
||||
public:
|
||||
reactive_socket_recvmsg_op_base(socket_type socket,
|
||||
const MutableBufferSequence& buffers, socket_base::message_flags in_flags,
|
||||
reactive_socket_recvmsg_op_base(const boost::system::error_code& success_ec,
|
||||
socket_type socket, const MutableBufferSequence& buffers,
|
||||
socket_base::message_flags in_flags,
|
||||
socket_base::message_flags& out_flags, func_type complete_func)
|
||||
: reactor_op(&reactive_socket_recvmsg_op_base::do_perform, complete_func),
|
||||
: reactor_op(success_ec,
|
||||
&reactive_socket_recvmsg_op_base::do_perform, complete_func),
|
||||
socket_(socket),
|
||||
buffers_(buffers),
|
||||
in_flags_(in_flags),
|
||||
@@ -78,12 +80,14 @@ class reactive_socket_recvmsg_op :
|
||||
public:
|
||||
BOOST_ASIO_DEFINE_HANDLER_PTR(reactive_socket_recvmsg_op);
|
||||
|
||||
reactive_socket_recvmsg_op(socket_type socket,
|
||||
const MutableBufferSequence& buffers, socket_base::message_flags in_flags,
|
||||
reactive_socket_recvmsg_op(const boost::system::error_code& success_ec,
|
||||
socket_type socket, const MutableBufferSequence& buffers,
|
||||
socket_base::message_flags in_flags,
|
||||
socket_base::message_flags& out_flags, Handler& handler,
|
||||
const IoExecutor& io_ex)
|
||||
: reactive_socket_recvmsg_op_base<MutableBufferSequence>(socket, buffers,
|
||||
in_flags, out_flags, &reactive_socket_recvmsg_op::do_complete),
|
||||
: reactive_socket_recvmsg_op_base<MutableBufferSequence>(
|
||||
success_ec, socket, buffers, in_flags, out_flags,
|
||||
&reactive_socket_recvmsg_op::do_complete),
|
||||
handler_(BOOST_ASIO_MOVE_CAST(Handler)(handler)),
|
||||
io_executor_(io_ex)
|
||||
{
|
||||
|
||||
@@ -33,10 +33,12 @@ template <typename ConstBufferSequence>
|
||||
class reactive_socket_send_op_base : public reactor_op
|
||||
{
|
||||
public:
|
||||
reactive_socket_send_op_base(socket_type socket,
|
||||
socket_ops::state_type state, const ConstBufferSequence& buffers,
|
||||
reactive_socket_send_op_base(const boost::system::error_code& success_ec,
|
||||
socket_type socket, socket_ops::state_type state,
|
||||
const ConstBufferSequence& buffers,
|
||||
socket_base::message_flags flags, func_type complete_func)
|
||||
: reactor_op(&reactive_socket_send_op_base::do_perform, complete_func),
|
||||
: reactor_op(success_ec,
|
||||
&reactive_socket_send_op_base::do_perform, complete_func),
|
||||
socket_(socket),
|
||||
state_(state),
|
||||
buffers_(buffers),
|
||||
@@ -98,10 +100,11 @@ class reactive_socket_send_op :
|
||||
public:
|
||||
BOOST_ASIO_DEFINE_HANDLER_PTR(reactive_socket_send_op);
|
||||
|
||||
reactive_socket_send_op(socket_type socket, socket_ops::state_type state,
|
||||
reactive_socket_send_op(const boost::system::error_code& success_ec,
|
||||
socket_type socket, socket_ops::state_type state,
|
||||
const ConstBufferSequence& buffers, socket_base::message_flags flags,
|
||||
Handler& handler, const IoExecutor& io_ex)
|
||||
: reactive_socket_send_op_base<ConstBufferSequence>(socket,
|
||||
: reactive_socket_send_op_base<ConstBufferSequence>(success_ec, socket,
|
||||
state, buffers, flags, &reactive_socket_send_op::do_complete),
|
||||
handler_(BOOST_ASIO_MOVE_CAST(Handler)(handler)),
|
||||
io_executor_(io_ex)
|
||||
|
||||
@@ -33,10 +33,12 @@ template <typename ConstBufferSequence, typename Endpoint>
|
||||
class reactive_socket_sendto_op_base : public reactor_op
|
||||
{
|
||||
public:
|
||||
reactive_socket_sendto_op_base(socket_type socket,
|
||||
const ConstBufferSequence& buffers, const Endpoint& endpoint,
|
||||
socket_base::message_flags flags, func_type complete_func)
|
||||
: reactor_op(&reactive_socket_sendto_op_base::do_perform, complete_func),
|
||||
reactive_socket_sendto_op_base(const boost::system::error_code& success_ec,
|
||||
socket_type socket, const ConstBufferSequence& buffers,
|
||||
const Endpoint& endpoint, socket_base::message_flags flags,
|
||||
func_type complete_func)
|
||||
: reactor_op(success_ec,
|
||||
&reactive_socket_sendto_op_base::do_perform, complete_func),
|
||||
socket_(socket),
|
||||
buffers_(buffers),
|
||||
destination_(endpoint),
|
||||
@@ -78,12 +80,13 @@ class reactive_socket_sendto_op :
|
||||
public:
|
||||
BOOST_ASIO_DEFINE_HANDLER_PTR(reactive_socket_sendto_op);
|
||||
|
||||
reactive_socket_sendto_op(socket_type socket,
|
||||
const ConstBufferSequence& buffers, const Endpoint& endpoint,
|
||||
socket_base::message_flags flags, Handler& handler,
|
||||
const IoExecutor& io_ex)
|
||||
: reactive_socket_sendto_op_base<ConstBufferSequence, Endpoint>(socket,
|
||||
buffers, endpoint, flags, &reactive_socket_sendto_op::do_complete),
|
||||
reactive_socket_sendto_op(const boost::system::error_code& success_ec,
|
||||
socket_type socket, const ConstBufferSequence& buffers,
|
||||
const Endpoint& endpoint, socket_base::message_flags flags,
|
||||
Handler& handler, const IoExecutor& io_ex)
|
||||
: reactive_socket_sendto_op_base<ConstBufferSequence, Endpoint>(
|
||||
success_ec, socket, buffers, endpoint, flags,
|
||||
&reactive_socket_sendto_op::do_complete),
|
||||
handler_(BOOST_ASIO_MOVE_CAST(Handler)(handler)),
|
||||
io_executor_(io_ex)
|
||||
{
|
||||
|
||||
@@ -255,8 +255,8 @@ public:
|
||||
endpoint_type, Handler, IoExecutor> op;
|
||||
typename op::ptr p = { boost::asio::detail::addressof(handler),
|
||||
op::ptr::allocate(handler), 0 };
|
||||
p.p = new (p.v) op(impl.socket_, buffers,
|
||||
destination, flags, handler, io_ex);
|
||||
p.p = new (p.v) op(success_ec_, impl.socket_,
|
||||
buffers, destination, flags, handler, io_ex);
|
||||
|
||||
BOOST_ASIO_HANDLER_CREATION((reactor_.context(), *p.p, "socket",
|
||||
&impl, impl.socket_, "async_send_to"));
|
||||
@@ -278,7 +278,7 @@ public:
|
||||
typedef reactive_null_buffers_op<Handler, IoExecutor> op;
|
||||
typename op::ptr p = { boost::asio::detail::addressof(handler),
|
||||
op::ptr::allocate(handler), 0 };
|
||||
p.p = new (p.v) op(handler, io_ex);
|
||||
p.p = new (p.v) op(success_ec_, handler, io_ex);
|
||||
|
||||
BOOST_ASIO_HANDLER_CREATION((reactor_.context(), *p.p, "socket",
|
||||
&impl, impl.socket_, "async_send_to(null_buffers)"));
|
||||
@@ -342,8 +342,8 @@ public:
|
||||
typename op::ptr p = { boost::asio::detail::addressof(handler),
|
||||
op::ptr::allocate(handler), 0 };
|
||||
int protocol = impl.protocol_.type();
|
||||
p.p = new (p.v) op(impl.socket_, protocol, buffers,
|
||||
sender_endpoint, flags, handler, io_ex);
|
||||
p.p = new (p.v) op(success_ec_, impl.socket_, protocol,
|
||||
buffers, sender_endpoint, flags, handler, io_ex);
|
||||
|
||||
BOOST_ASIO_HANDLER_CREATION((reactor_.context(), *p.p, "socket",
|
||||
&impl, impl.socket_, "async_receive_from"));
|
||||
@@ -368,7 +368,7 @@ public:
|
||||
typedef reactive_null_buffers_op<Handler, IoExecutor> op;
|
||||
typename op::ptr p = { boost::asio::detail::addressof(handler),
|
||||
op::ptr::allocate(handler), 0 };
|
||||
p.p = new (p.v) op(handler, io_ex);
|
||||
p.p = new (p.v) op(success_ec_, handler, io_ex);
|
||||
|
||||
BOOST_ASIO_HANDLER_CREATION((reactor_.context(), *p.p, "socket",
|
||||
&impl, impl.socket_, "async_receive_from(null_buffers)"));
|
||||
@@ -426,8 +426,8 @@ public:
|
||||
typedef reactive_socket_accept_op<Socket, Protocol, Handler, IoExecutor> op;
|
||||
typename op::ptr p = { boost::asio::detail::addressof(handler),
|
||||
op::ptr::allocate(handler), 0 };
|
||||
p.p = new (p.v) op(impl.socket_, impl.state_, peer,
|
||||
impl.protocol_, peer_endpoint, handler, io_ex);
|
||||
p.p = new (p.v) op(success_ec_, impl.socket_, impl.state_,
|
||||
peer, impl.protocol_, peer_endpoint, handler, io_ex);
|
||||
|
||||
BOOST_ASIO_HANDLER_CREATION((reactor_.context(), *p.p, "socket",
|
||||
&impl, impl.socket_, "async_accept"));
|
||||
@@ -452,8 +452,8 @@ public:
|
||||
PeerIoExecutor, Handler, IoExecutor> op;
|
||||
typename op::ptr p = { boost::asio::detail::addressof(handler),
|
||||
op::ptr::allocate(handler), 0 };
|
||||
p.p = new (p.v) op(peer_io_ex, impl.socket_, impl.state_,
|
||||
impl.protocol_, peer_endpoint, handler, io_ex);
|
||||
p.p = new (p.v) op(success_ec_, peer_io_ex, impl.socket_,
|
||||
impl.state_, impl.protocol_, peer_endpoint, handler, io_ex);
|
||||
|
||||
BOOST_ASIO_HANDLER_CREATION((reactor_.context(), *p.p, "socket",
|
||||
&impl, impl.socket_, "async_accept"));
|
||||
@@ -485,7 +485,7 @@ public:
|
||||
typedef reactive_socket_connect_op<Handler, IoExecutor> op;
|
||||
typename op::ptr p = { boost::asio::detail::addressof(handler),
|
||||
op::ptr::allocate(handler), 0 };
|
||||
p.p = new (p.v) op(impl.socket_, handler, io_ex);
|
||||
p.p = new (p.v) op(success_ec_, impl.socket_, handler, io_ex);
|
||||
|
||||
BOOST_ASIO_HANDLER_CREATION((reactor_.context(), *p.p, "socket",
|
||||
&impl, impl.socket_, "async_connect"));
|
||||
|
||||
@@ -204,7 +204,7 @@ public:
|
||||
typedef reactive_wait_op<Handler, IoExecutor> op;
|
||||
typename op::ptr p = { boost::asio::detail::addressof(handler),
|
||||
op::ptr::allocate(handler), 0 };
|
||||
p.p = new (p.v) op(handler, io_ex);
|
||||
p.p = new (p.v) op(success_ec_, handler, io_ex);
|
||||
|
||||
BOOST_ASIO_HANDLER_CREATION((reactor_.context(), *p.p, "socket",
|
||||
&impl, impl.socket_, "async_wait"));
|
||||
@@ -280,8 +280,8 @@ public:
|
||||
ConstBufferSequence, Handler, IoExecutor> op;
|
||||
typename op::ptr p = { boost::asio::detail::addressof(handler),
|
||||
op::ptr::allocate(handler), 0 };
|
||||
p.p = new (p.v) op(impl.socket_, impl.state_,
|
||||
buffers, flags, handler, io_ex);
|
||||
p.p = new (p.v) op(success_ec_, impl.socket_,
|
||||
impl.state_, buffers, flags, handler, io_ex);
|
||||
|
||||
BOOST_ASIO_HANDLER_CREATION((reactor_.context(), *p.p, "socket",
|
||||
&impl, impl.socket_, "async_send"));
|
||||
@@ -305,7 +305,7 @@ public:
|
||||
typedef reactive_null_buffers_op<Handler, IoExecutor> op;
|
||||
typename op::ptr p = { boost::asio::detail::addressof(handler),
|
||||
op::ptr::allocate(handler), 0 };
|
||||
p.p = new (p.v) op(handler, io_ex);
|
||||
p.p = new (p.v) op(success_ec_, handler, io_ex);
|
||||
|
||||
BOOST_ASIO_HANDLER_CREATION((reactor_.context(), *p.p, "socket",
|
||||
&impl, impl.socket_, "async_send(null_buffers)"));
|
||||
@@ -363,8 +363,8 @@ public:
|
||||
MutableBufferSequence, Handler, IoExecutor> op;
|
||||
typename op::ptr p = { boost::asio::detail::addressof(handler),
|
||||
op::ptr::allocate(handler), 0 };
|
||||
p.p = new (p.v) op(impl.socket_, impl.state_,
|
||||
buffers, flags, handler, io_ex);
|
||||
p.p = new (p.v) op(success_ec_, impl.socket_,
|
||||
impl.state_, buffers, flags, handler, io_ex);
|
||||
|
||||
BOOST_ASIO_HANDLER_CREATION((reactor_.context(), *p.p, "socket",
|
||||
&impl, impl.socket_, "async_receive"));
|
||||
@@ -393,7 +393,7 @@ public:
|
||||
typedef reactive_null_buffers_op<Handler, IoExecutor> op;
|
||||
typename op::ptr p = { boost::asio::detail::addressof(handler),
|
||||
op::ptr::allocate(handler), 0 };
|
||||
p.p = new (p.v) op(handler, io_ex);
|
||||
p.p = new (p.v) op(success_ec_, handler, io_ex);
|
||||
|
||||
BOOST_ASIO_HANDLER_CREATION((reactor_.context(), *p.p, "socket",
|
||||
&impl, impl.socket_, "async_receive(null_buffers)"));
|
||||
@@ -452,8 +452,8 @@ public:
|
||||
MutableBufferSequence, Handler, IoExecutor> op;
|
||||
typename op::ptr p = { boost::asio::detail::addressof(handler),
|
||||
op::ptr::allocate(handler), 0 };
|
||||
p.p = new (p.v) op(impl.socket_, buffers,
|
||||
in_flags, out_flags, handler, io_ex);
|
||||
p.p = new (p.v) op(success_ec_, impl.socket_,
|
||||
buffers, in_flags, out_flags, handler, io_ex);
|
||||
|
||||
BOOST_ASIO_HANDLER_CREATION((reactor_.context(), *p.p, "socket",
|
||||
&impl, impl.socket_, "async_receive_with_flags"));
|
||||
@@ -480,7 +480,7 @@ public:
|
||||
typedef reactive_null_buffers_op<Handler, IoExecutor> op;
|
||||
typename op::ptr p = { boost::asio::detail::addressof(handler),
|
||||
op::ptr::allocate(handler), 0 };
|
||||
p.p = new (p.v) op(handler, io_ex);
|
||||
p.p = new (p.v) op(success_ec_, handler, io_ex);
|
||||
|
||||
BOOST_ASIO_HANDLER_CREATION((reactor_.context(), *p.p, "socket",
|
||||
&impl, impl.socket_, "async_receive_with_flags(null_buffers)"));
|
||||
@@ -522,6 +522,9 @@ protected:
|
||||
|
||||
// The selector that performs event demultiplexing for the service.
|
||||
reactor& reactor_;
|
||||
|
||||
// Cached success value to avoid accessing category singleton.
|
||||
const boost::system::error_code success_ec_;
|
||||
};
|
||||
|
||||
} // namespace detail
|
||||
|
||||
@@ -34,8 +34,9 @@ class reactive_wait_op : public reactor_op
|
||||
public:
|
||||
BOOST_ASIO_DEFINE_HANDLER_PTR(reactive_wait_op);
|
||||
|
||||
reactive_wait_op(Handler& handler, const IoExecutor& io_ex)
|
||||
: reactor_op(&reactive_wait_op::do_perform,
|
||||
reactive_wait_op(const boost::system::error_code& success_ec,
|
||||
Handler& handler, const IoExecutor& io_ex)
|
||||
: reactor_op(success_ec, &reactive_wait_op::do_perform,
|
||||
&reactive_wait_op::do_complete),
|
||||
handler_(BOOST_ASIO_MOVE_CAST(Handler)(handler)),
|
||||
io_executor_(io_ex)
|
||||
|
||||
@@ -47,8 +47,10 @@ public:
|
||||
protected:
|
||||
typedef status (*perform_func_type)(reactor_op*);
|
||||
|
||||
reactor_op(perform_func_type perform_func, func_type complete_func)
|
||||
reactor_op(const boost::system::error_code& success_ec,
|
||||
perform_func_type perform_func, func_type complete_func)
|
||||
: operation(complete_func),
|
||||
ec_(success_ec),
|
||||
bytes_transferred_(0),
|
||||
perform_func_(perform_func)
|
||||
{
|
||||
|
||||
@@ -43,7 +43,8 @@ public:
|
||||
|
||||
win_iocp_null_buffers_op(socket_ops::weak_cancel_token_type cancel_token,
|
||||
Handler& handler, const IoExecutor& io_ex)
|
||||
: reactor_op(&win_iocp_null_buffers_op::do_perform,
|
||||
: reactor_op(boost::system::error_code(),
|
||||
&win_iocp_null_buffers_op::do_perform,
|
||||
&win_iocp_null_buffers_op::do_complete),
|
||||
cancel_token_(cancel_token),
|
||||
handler_(BOOST_ASIO_MOVE_CAST(Handler)(handler)),
|
||||
|
||||
@@ -38,7 +38,8 @@ class win_iocp_socket_connect_op_base : public reactor_op
|
||||
{
|
||||
public:
|
||||
win_iocp_socket_connect_op_base(socket_type socket, func_type complete_func)
|
||||
: reactor_op(&win_iocp_socket_connect_op_base::do_perform, complete_func),
|
||||
: reactor_op(boost::system::error_code(),
|
||||
&win_iocp_socket_connect_op_base::do_perform, complete_func),
|
||||
socket_(socket),
|
||||
connect_ex_(false)
|
||||
{
|
||||
|
||||
@@ -43,7 +43,8 @@ public:
|
||||
|
||||
win_iocp_wait_op(socket_ops::weak_cancel_token_type cancel_token,
|
||||
Handler& handler, const IoExecutor& io_ex)
|
||||
: reactor_op(&win_iocp_wait_op::do_perform,
|
||||
: reactor_op(boost::system::error_code(),
|
||||
&win_iocp_wait_op::do_perform,
|
||||
&win_iocp_wait_op::do_complete),
|
||||
cancel_token_(cancel_token),
|
||||
handler_(BOOST_ASIO_MOVE_CAST(Handler)(handler)),
|
||||
|
||||
Reference in New Issue
Block a user