⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 basic_socket_acceptor.hpp

📁 这是国外的resip协议栈
💻 HPP
📖 第 1 页 / 共 2 页
字号:
//// basic_socket_acceptor.hpp// ~~~~~~~~~~~~~~~~~~~~~~~~~//// Copyright (c) 2003-2007 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)//#ifndef ASIO_BASIC_SOCKET_ACCEPTOR_HPP#define ASIO_BASIC_SOCKET_ACCEPTOR_HPP#if defined(_MSC_VER) && (_MSC_VER >= 1200)# pragma once#endif // defined(_MSC_VER) && (_MSC_VER >= 1200)#include "asio/detail/push_options.hpp"#include "asio/basic_io_object.hpp"#include "asio/basic_socket.hpp"#include "asio/error.hpp"#include "asio/socket_acceptor_service.hpp"#include "asio/socket_base.hpp"#include "asio/detail/throw_error.hpp"namespace asio {/// Provides the ability to accept new connections./** * The basic_socket_acceptor class template is used for accepting new socket * connections. * * @par Thread Safety * @e Distinct @e objects: Safe.@n * @e Shared @e objects: Unsafe. * * @par Example * Opening a socket acceptor with the SO_REUSEADDR option enabled: * @code * asio::ip::tcp::acceptor acceptor(io_service); * asio::ip::tcp::endpoint endpoint(asio::ip::tcp::v4(), port); * acceptor.open(endpoint.protocol()); * acceptor.set_option(asio::ip::tcp::acceptor::reuse_address(true)); * acceptor.bind(endpoint); * acceptor.listen(); * @endcode */template <typename Protocol,    typename SocketAcceptorService = socket_acceptor_service<Protocol> >class basic_socket_acceptor  : public basic_io_object<SocketAcceptorService>,    public socket_base{public:  /// The native representation of an acceptor.  typedef typename SocketAcceptorService::native_type native_type;  /// The protocol type.  typedef Protocol protocol_type;  /// The endpoint type.  typedef typename Protocol::endpoint endpoint_type;  /// Construct an acceptor without opening it.  /**   * This constructor creates an acceptor without opening it to listen for new   * connections. The open() function must be called before the acceptor can   * accept new socket connections.   *   * @param io_service The io_service object that the acceptor will use to   * dispatch handlers for any asynchronous operations performed on the   * acceptor.   */  explicit basic_socket_acceptor(asio::io_service& io_service)    : basic_io_object<SocketAcceptorService>(io_service)  {  }  /// Construct an open acceptor.  /**   * This constructor creates an acceptor and automatically opens it.   *   * @param io_service The io_service object that the acceptor will use to   * dispatch handlers for any asynchronous operations performed on the   * acceptor.   *   * @param protocol An object specifying protocol parameters to be used.   *   * @throws asio::system_error Thrown on failure.   */  basic_socket_acceptor(asio::io_service& io_service,      const protocol_type& protocol)    : basic_io_object<SocketAcceptorService>(io_service)  {    asio::error_code ec;    this->service.open(this->implementation, protocol, ec);    asio::detail::throw_error(ec);  }  /// Construct an acceptor opened on the given endpoint.  /**   * This constructor creates an acceptor and automatically opens it to listen   * for new connections on the specified endpoint.   *   * @param io_service The io_service object that the acceptor will use to   * dispatch handlers for any asynchronous operations performed on the   * acceptor.   *   * @param endpoint An endpoint on the local machine on which the acceptor   * will listen for new connections.   *   * @param reuse_addr Whether the constructor should set the socket option   * socket_base::reuse_address.   *   * @throws asio::system_error Thrown on failure.   *   * @note This constructor is equivalent to the following code:   * @code   * basic_socket_acceptor<Protocol> acceptor(io_service);   * acceptor.open(endpoint.protocol());   * if (reuse_addr)   *   acceptor.set_option(socket_base::reuse_address(true));   * acceptor.bind(endpoint);   * acceptor.listen(listen_backlog);   * @endcode   */  basic_socket_acceptor(asio::io_service& io_service,      const endpoint_type& endpoint, bool reuse_addr = true)    : basic_io_object<SocketAcceptorService>(io_service)  {    asio::error_code ec;    this->service.open(this->implementation, endpoint.protocol(), ec);    asio::detail::throw_error(ec);    if (reuse_addr)    {      this->service.set_option(this->implementation,          socket_base::reuse_address(true), ec);      asio::detail::throw_error(ec);    }    this->service.bind(this->implementation, endpoint, ec);    asio::detail::throw_error(ec);    this->service.listen(this->implementation,        socket_base::max_connections, ec);    asio::detail::throw_error(ec);  }  /// Construct a basic_socket_acceptor on an existing native acceptor.  /**   * This constructor creates an acceptor object to hold an existing native   * acceptor.   *   * @param io_service The io_service object that the acceptor will use to   * dispatch handlers for any asynchronous operations performed on the   * acceptor.   *   * @param protocol An object specifying protocol parameters to be used.   *   * @param native_acceptor A native acceptor.   *   * @throws asio::system_error Thrown on failure.   */  basic_socket_acceptor(asio::io_service& io_service,      const protocol_type& protocol, const native_type& native_acceptor)    : basic_io_object<SocketAcceptorService>(io_service)  {    asio::error_code ec;    this->service.assign(this->implementation, protocol, native_acceptor, ec);    asio::detail::throw_error(ec);  }  /// Open the acceptor using the specified protocol.  /**   * This function opens the socket acceptor so that it will use the specified   * protocol.   *   * @param protocol An object specifying which protocol is to be used.   *   * @throws asio::system_error Thrown on failure.   *   * @par Example   * @code   * asio::ip::tcp::acceptor acceptor(io_service);   * acceptor.open(asio::ip::tcp::v4());   * @endcode   */  void open(const protocol_type& protocol = protocol_type())  {    asio::error_code ec;    this->service.open(this->implementation, protocol, ec);    asio::detail::throw_error(ec);  }  /// Open the acceptor using the specified protocol.  /**   * This function opens the socket acceptor so that it will use the specified   * protocol.   *   * @param protocol An object specifying which protocol is to be used.   *   * @param ec Set to indicate what error occurred, if any.   *   * @par Example   * @code   * asio::ip::tcp::acceptor acceptor(io_service);   * asio::error_code ec;   * acceptor.open(asio::ip::tcp::v4(), ec);   * if (ec)   * {   *   // An error occurred.   * }   * @endcode   */  asio::error_code open(const protocol_type& protocol,      asio::error_code& ec)  {    return this->service.open(this->implementation, protocol, ec);  }  /// Assigns an existing native acceptor to the acceptor.  /*   * This function opens the acceptor to hold an existing native acceptor.   *   * @param protocol An object specifying which protocol is to be used.   *   * @param native_acceptor A native acceptor.   *   * @throws asio::system_error Thrown on failure.   */  void assign(const protocol_type& protocol, const native_type& native_acceptor)  {    asio::error_code ec;    this->service.assign(this->implementation, protocol, native_acceptor, ec);    asio::detail::throw_error(ec);  }  /// Assigns an existing native acceptor to the acceptor.  /*   * This function opens the acceptor to hold an existing native acceptor.   *   * @param protocol An object specifying which protocol is to be used.   *   * @param native_acceptor A native acceptor.   *   * @param ec Set to indicate what error occurred, if any.   */  asio::error_code assign(const protocol_type& protocol,      const native_type& native_acceptor, asio::error_code& ec)  {    return this->service.assign(this->implementation,        protocol, native_acceptor, ec);  }  /// Determine whether the acceptor is open.  bool is_open() const  {    return this->service.is_open(this->implementation);  }  /// Bind the acceptor to the given local endpoint.  /**   * This function binds the socket acceptor to the specified endpoint on the   * local machine.   *   * @param endpoint An endpoint on the local machine to which the socket   * acceptor will be bound.   *   * @throws asio::system_error Thrown on failure.   *   * @par Example   * @code   * asio::ip::tcp::acceptor acceptor(io_service);   * acceptor.open(asio::ip::tcp::v4());   * acceptor.bind(asio::ip::tcp::endpoint(12345));   * @endcode   */  void bind(const endpoint_type& endpoint)  {    asio::error_code ec;    this->service.bind(this->implementation, endpoint, ec);    asio::detail::throw_error(ec);  }  /// Bind the acceptor to the given local endpoint.  /**   * This function binds the socket acceptor to the specified endpoint on the   * local machine.   *   * @param endpoint An endpoint on the local machine to which the socket   * acceptor will be bound.   *   * @param ec Set to indicate what error occurred, if any.   *   * @par Example   * @code   * asio::ip::tcp::acceptor acceptor(io_service);   * acceptor.open(asio::ip::tcp::v4());   * asio::error_code ec;   * acceptor.bind(asio::ip::tcp::endpoint(12345), ec);   * if (ec)   * {   *   // An error occurred.   * }   * @endcode   */  asio::error_code bind(const endpoint_type& endpoint,      asio::error_code& ec)  {    return this->service.bind(this->implementation, endpoint, ec);  }  /// Place the acceptor into the state where it will listen for new  /// connections.  /**   * This function puts the socket acceptor into the state where it may accept   * new connections.   *   * @param backlog The maximum length of the queue of pending connections.   *   * @throws asio::system_error Thrown on failure.   */  void listen(int backlog = socket_base::max_connections)  {    asio::error_code ec;    this->service.listen(this->implementation, backlog, ec);    asio::detail::throw_error(ec);  }  /// Place the acceptor into the state where it will listen for new  /// connections.  /**   * This function puts the socket acceptor into the state where it may accept   * new connections.   *   * @param backlog The maximum length of the queue of pending connections.   *   * @param ec Set to indicate what error occurred, if any.   *   * @par Example   * @code   * asio::ip::tcp::acceptor acceptor(io_service);   * ...   * asio::error_code ec;   * acceptor.listen(asio::socket_base::max_connections, ec);   * if (ec)   * {   *   // An error occurred.   * }   * @endcode   */  asio::error_code listen(int backlog, asio::error_code& ec)  {    return this->service.listen(this->implementation, backlog, ec);  }  /// Close the acceptor.  /**   * This function is used to close the acceptor. Any asynchronous accept   * operations will be cancelled immediately.   *   * A subsequent call to open() is required before the acceptor can again be   * used to again perform socket accept operations.   *   * @throws asio::system_error Thrown on failure.   */  void close()  {    asio::error_code ec;    this->service.close(this->implementation, ec);    asio::detail::throw_error(ec);  }  /// Close the acceptor.  /**   * This function is used to close the acceptor. Any asynchronous accept   * operations will be cancelled immediately.   *   * A subsequent call to open() is required before the acceptor can again be   * used to again perform socket accept operations.   *   * @param ec Set to indicate what error occurred, if any.   *   * @par Example   * @code   * asio::ip::tcp::acceptor acceptor(io_service);   * ...   * asio::error_code ec;   * acceptor.close(ec);   * if (ec)   * {   *   // An error occurred.   * }   * @endcode   */  asio::error_code close(asio::error_code& ec)  {    return this->service.close(this->implementation, ec);  }  /// Get the native acceptor representation.  /**   * This function may be used to obtain the underlying representation of the   * acceptor. This is intended to allow access to native acceptor functionality   * that is not otherwise provided.   */  native_type native()  {    return this->service.native(this->implementation);  }  /// Cancel all asynchronous operations associated with the acceptor.  /**   * This function causes all outstanding asynchronous connect, send and receive

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -