diff options
Diffstat (limited to '3rdParty/Boost/src/boost/asio/detail/reactive_descriptor_service.hpp')
-rw-r--r-- | 3rdParty/Boost/src/boost/asio/detail/reactive_descriptor_service.hpp | 67 |
1 files changed, 60 insertions, 7 deletions
diff --git a/3rdParty/Boost/src/boost/asio/detail/reactive_descriptor_service.hpp b/3rdParty/Boost/src/boost/asio/detail/reactive_descriptor_service.hpp index 510c505..5efb24b 100644 --- a/3rdParty/Boost/src/boost/asio/detail/reactive_descriptor_service.hpp +++ b/3rdParty/Boost/src/boost/asio/detail/reactive_descriptor_service.hpp @@ -2,7 +2,7 @@ // detail/reactive_descriptor_service.hpp // ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ // -// Copyright (c) 2003-2011 Christopher M. Kohlhoff (chris at kohlhoff dot com) +// Copyright (c) 2003-2012 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) @@ -42,7 +42,7 @@ class reactive_descriptor_service { public: // The native type of a descriptor. - typedef int native_type; + typedef int native_handle_type; // The implementation type of the descriptor. class implementation_type @@ -80,12 +80,22 @@ public: // Construct a new descriptor implementation. BOOST_ASIO_DECL void construct(implementation_type& impl); + // Move-construct a new descriptor implementation. + BOOST_ASIO_DECL void move_construct(implementation_type& impl, + implementation_type& other_impl); + + // Move-assign from another descriptor implementation. + BOOST_ASIO_DECL void move_assign(implementation_type& impl, + reactive_descriptor_service& other_service, + implementation_type& other_impl); + // Destroy a descriptor implementation. BOOST_ASIO_DECL void destroy(implementation_type& impl); // Assign a native descriptor to a descriptor implementation. BOOST_ASIO_DECL boost::system::error_code assign(implementation_type& impl, - const native_type& native_descriptor, boost::system::error_code& ec); + const native_handle_type& native_descriptor, + boost::system::error_code& ec); // Determine whether the descriptor is open. bool is_open(const implementation_type& impl) const @@ -98,11 +108,14 @@ public: boost::system::error_code& ec); // Get the native descriptor representation. - native_type native(const implementation_type& impl) const + native_handle_type native_handle(const implementation_type& impl) const { return impl.descriptor_; } + // Release ownership of the native descriptor representation. + BOOST_ASIO_DECL native_handle_type release(implementation_type& impl); + // Cancel all operations associated with the descriptor. BOOST_ASIO_DECL boost::system::error_code cancel(implementation_type& impl, boost::system::error_code& ec); @@ -117,6 +130,36 @@ public: return ec; } + // Gets the non-blocking mode of the descriptor. + bool non_blocking(const implementation_type& impl) const + { + return (impl.state_ & descriptor_ops::user_set_non_blocking) != 0; + } + + // Sets the non-blocking mode of the descriptor. + boost::system::error_code non_blocking(implementation_type& impl, + bool mode, boost::system::error_code& ec) + { + descriptor_ops::set_user_non_blocking( + impl.descriptor_, impl.state_, mode, ec); + return ec; + } + + // Gets the non-blocking mode of the native descriptor implementation. + bool native_non_blocking(const implementation_type& impl) const + { + return (impl.state_ & descriptor_ops::internal_non_blocking) != 0; + } + + // Sets the non-blocking mode of the native descriptor implementation. + boost::system::error_code native_non_blocking(implementation_type& impl, + bool mode, boost::system::error_code& ec) + { + descriptor_ops::set_internal_non_blocking( + impl.descriptor_, impl.state_, mode, ec); + return ec; + } + // Write some data to the descriptor. template <typename ConstBufferSequence> size_t write_some(implementation_type& impl, @@ -134,7 +177,7 @@ public: const null_buffers&, boost::system::error_code& ec) { // Wait for descriptor to become ready. - descriptor_ops::poll_write(impl.descriptor_, ec); + descriptor_ops::poll_write(impl.descriptor_, impl.state_, ec); return 0; } @@ -152,6 +195,8 @@ public: sizeof(op), handler), 0 }; p.p = new (p.v) op(impl.descriptor_, buffers, handler); + BOOST_ASIO_HANDLER_CREATION((p.p, "descriptor", &impl, "async_write_some")); + start_op(impl, reactor::write_op, p.p, true, buffer_sequence_adapter<boost::asio::const_buffer, ConstBufferSequence>::all_empty(buffers)); @@ -170,6 +215,9 @@ public: sizeof(op), handler), 0 }; p.p = new (p.v) op(handler); + BOOST_ASIO_HANDLER_CREATION((p.p, "descriptor", + &impl, "async_write_some(null_buffers)")); + start_op(impl, reactor::write_op, p.p, false, false); p.v = p.p = 0; } @@ -191,7 +239,7 @@ public: const null_buffers&, boost::system::error_code& ec) { // Wait for descriptor to become ready. - descriptor_ops::poll_read(impl.descriptor_, ec); + descriptor_ops::poll_read(impl.descriptor_, impl.state_, ec); return 0; } @@ -209,6 +257,8 @@ public: sizeof(op), handler), 0 }; p.p = new (p.v) op(impl.descriptor_, buffers, handler); + BOOST_ASIO_HANDLER_CREATION((p.p, "descriptor", &impl, "async_read_some")); + start_op(impl, reactor::read_op, p.p, true, buffer_sequence_adapter<boost::asio::mutable_buffer, MutableBufferSequence>::all_empty(buffers)); @@ -227,6 +277,9 @@ public: sizeof(op), handler), 0 }; p.p = new (p.v) op(handler); + BOOST_ASIO_HANDLER_CREATION((p.p, "descriptor", + &impl, "async_read_some(null_buffers)")); + start_op(impl, reactor::read_op, p.p, false, false); p.v = p.p = 0; } @@ -234,7 +287,7 @@ public: private: // Start the asynchronous operation. BOOST_ASIO_DECL void start_op(implementation_type& impl, int op_type, - reactor_op* op, bool non_blocking, bool noop); + reactor_op* op, bool is_non_blocking, bool noop); // The selector that performs event demultiplexing for the service. reactor& reactor_; |