template <typename SocketBase?=asynch_socket_base<> , typename Multiplexor> class asynch_data_socket : public data_socket<SocketBase?> { public: typedef SocketBase? socket_base_t; typedef Multiplexor multiplexor_t;
typedef typename socket_base_t::socket_t socket_t; typedef typename socket_base_t::error_policy error_policy;
typedef boost::function2<void, socket_errno, unsigned int> completion_callback_t;
asynch_data_socket(multiplexor_t& multiplexor) explicit asynch_data_socket(socket_t socket, multiplexor_t& multiplexor)
//! Asynchronous receive socket_errno asynch_recv(void* data, int len, completion_callback_t completionRoutine); //! Asynchronous receive socket_errno asynch_send(const void* data, int len, completion_callback_t completionRoutine);
~asynch_data_socket()
void reset(socket_t socket = socket_t());
template <typename SocketOption?> socket_errno ioctl(SocketOption?& option);
template <typename SocketOption?> socket_errno getsockopt(SocketOption?& option);
template <typename SocketOption?> socket_errno setsockopt(const SocketOption?& option);
socket_errno close(Direction how=Both); bool is_open() const; socket_t socket(); socket_base_t& base(); bool operator<(const data_socket& socket) const; bool operator==(const data_socket& socket) const; bool operator!=(const data_socket& socket) const; private: socket_base_t m_socket;
}
If a proactor and asynch base socket is used the operations is queued directly to the lower levels, if a reactor is used the operations is queued in the acceptor until an accept notification is received.