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

📄 basic_socket.hpp

📁 这是国外的resip协议栈
💻 HPP
📖 第 1 页 / 共 2 页
字号:
   * asio::ip::tcp::socket socket(io_service);   * asio::ip::tcp::endpoint endpoint(   *     asio::ip::address::from_string("1.2.3.4"), 12345);   * asio::error_code ec;   * socket.connect(endpoint, ec);   * if (ec)   * {   *   // An error occurred.   * }   * @endcode   */  asio::error_code connect(const endpoint_type& peer_endpoint,      asio::error_code& ec)  {    if (!is_open())    {      if (this->service.open(this->implementation,            peer_endpoint.protocol(), ec))      {        return ec;      }    }    return this->service.connect(this->implementation, peer_endpoint, ec);  }  /// Start an asynchronous connect.  /**   * This function is used to asynchronously connect a socket to the specified   * remote endpoint. The function call always returns immediately.   *   * The socket is automatically opened if it is not already open. If the   * connect fails, and the socket was automatically opened, the socket is   * returned to the closed state.   *   * @param peer_endpoint The remote endpoint to which the socket will be   * connected. Copies will be made of the endpoint object as required.   *   * @param handler The handler to be called when the connection operation   * completes. Copies will be made of the handler as required. The function   * signature of the handler must be:   * @code void handler(   *   const asio::error_code& error // Result of operation   * ); @endcode   * Regardless of whether the asynchronous operation completes immediately or   * not, the handler will not be invoked from within this function. Invocation   * of the handler will be performed in a manner equivalent to using   * asio::io_service::post().   *   * @par Example   * @code   * void connect_handler(const asio::error_code& error)   * {   *   if (!error)   *   {   *     // Connect succeeded.   *   }   * }   *   * ...   *   * asio::ip::tcp::socket socket(io_service);   * asio::ip::tcp::endpoint endpoint(   *     asio::ip::address::from_string("1.2.3.4"), 12345);   * socket.async_connect(endpoint, connect_handler);   * @endcode   */  template <typename ConnectHandler>  void async_connect(const endpoint_type& peer_endpoint, ConnectHandler handler)  {    if (!is_open())    {      asio::error_code ec;      if (this->service.open(this->implementation,            peer_endpoint.protocol(), ec))      {        this->get_io_service().post(            asio::detail::bind_handler(handler, ec));        return;      }    }    this->service.async_connect(this->implementation, peer_endpoint, handler);  }  /// Set an option on the socket.  /**   * This function is used to set an option on the socket.   *   * @param option The new option value to be set on the socket.   *   * @throws asio::system_error Thrown on failure.   *   * @sa SettableSocketOption @n   * asio::socket_base::broadcast @n   * asio::socket_base::do_not_route @n   * asio::socket_base::keep_alive @n   * asio::socket_base::linger @n   * asio::socket_base::receive_buffer_size @n   * asio::socket_base::receive_low_watermark @n   * asio::socket_base::reuse_address @n   * asio::socket_base::send_buffer_size @n   * asio::socket_base::send_low_watermark @n   * asio::ip::multicast::join_group @n   * asio::ip::multicast::leave_group @n   * asio::ip::multicast::enable_loopback @n   * asio::ip::multicast::outbound_interface @n   * asio::ip::multicast::hops @n   * asio::ip::tcp::no_delay   *   * @par Example   * Setting the IPPROTO_TCP/TCP_NODELAY option:   * @code   * asio::ip::tcp::socket socket(io_service);   * ...   * asio::ip::tcp::no_delay option(true);   * socket.set_option(option);   * @endcode   */  template <typename SettableSocketOption>  void set_option(const SettableSocketOption& option)  {    asio::error_code ec;    this->service.set_option(this->implementation, option, ec);    asio::detail::throw_error(ec);  }  /// Set an option on the socket.  /**   * This function is used to set an option on the socket.   *   * @param option The new option value to be set on the socket.   *   * @param ec Set to indicate what error occurred, if any.   *   * @sa SettableSocketOption @n   * asio::socket_base::broadcast @n   * asio::socket_base::do_not_route @n   * asio::socket_base::keep_alive @n   * asio::socket_base::linger @n   * asio::socket_base::receive_buffer_size @n   * asio::socket_base::receive_low_watermark @n   * asio::socket_base::reuse_address @n   * asio::socket_base::send_buffer_size @n   * asio::socket_base::send_low_watermark @n   * asio::ip::multicast::join_group @n   * asio::ip::multicast::leave_group @n   * asio::ip::multicast::enable_loopback @n   * asio::ip::multicast::outbound_interface @n   * asio::ip::multicast::hops @n   * asio::ip::tcp::no_delay   *   * @par Example   * Setting the IPPROTO_TCP/TCP_NODELAY option:   * @code   * asio::ip::tcp::socket socket(io_service);   * ...   * asio::ip::tcp::no_delay option(true);   * asio::error_code ec;   * socket.set_option(option, ec);   * if (ec)   * {   *   // An error occurred.   * }   * @endcode   */  template <typename SettableSocketOption>  asio::error_code set_option(const SettableSocketOption& option,      asio::error_code& ec)  {    return this->service.set_option(this->implementation, option, ec);  }  /// Get an option from the socket.  /**   * This function is used to get the current value of an option on the socket.   *   * @param option The option value to be obtained from the socket.   *   * @throws asio::system_error Thrown on failure.   *   * @sa GettableSocketOption @n   * asio::socket_base::broadcast @n   * asio::socket_base::do_not_route @n   * asio::socket_base::keep_alive @n   * asio::socket_base::linger @n   * asio::socket_base::receive_buffer_size @n   * asio::socket_base::receive_low_watermark @n   * asio::socket_base::reuse_address @n   * asio::socket_base::send_buffer_size @n   * asio::socket_base::send_low_watermark @n   * asio::ip::multicast::join_group @n   * asio::ip::multicast::leave_group @n   * asio::ip::multicast::enable_loopback @n   * asio::ip::multicast::outbound_interface @n   * asio::ip::multicast::hops @n   * asio::ip::tcp::no_delay   *   * @par Example   * Getting the value of the SOL_SOCKET/SO_KEEPALIVE option:   * @code   * asio::ip::tcp::socket socket(io_service);   * ...   * asio::ip::tcp::socket::keep_alive option;   * socket.get_option(option);   * bool is_set = option.get();   * @endcode   */  template <typename GettableSocketOption>  void get_option(GettableSocketOption& option) const  {    asio::error_code ec;    this->service.get_option(this->implementation, option, ec);    asio::detail::throw_error(ec);  }  /// Get an option from the socket.  /**   * This function is used to get the current value of an option on the socket.   *   * @param option The option value to be obtained from the socket.   *   * @param ec Set to indicate what error occurred, if any.   *   * @sa GettableSocketOption @n   * asio::socket_base::broadcast @n   * asio::socket_base::do_not_route @n   * asio::socket_base::keep_alive @n   * asio::socket_base::linger @n   * asio::socket_base::receive_buffer_size @n   * asio::socket_base::receive_low_watermark @n   * asio::socket_base::reuse_address @n   * asio::socket_base::send_buffer_size @n   * asio::socket_base::send_low_watermark @n   * asio::ip::multicast::join_group @n   * asio::ip::multicast::leave_group @n   * asio::ip::multicast::enable_loopback @n   * asio::ip::multicast::outbound_interface @n   * asio::ip::multicast::hops @n   * asio::ip::tcp::no_delay   *   * @par Example   * Getting the value of the SOL_SOCKET/SO_KEEPALIVE option:   * @code   * asio::ip::tcp::socket socket(io_service);   * ...   * asio::ip::tcp::socket::keep_alive option;   * asio::error_code ec;   * socket.get_option(option, ec);   * if (ec)   * {   *   // An error occurred.   * }   * bool is_set = option.get();   * @endcode   */  template <typename GettableSocketOption>  asio::error_code get_option(GettableSocketOption& option,      asio::error_code& ec) const  {    return this->service.get_option(this->implementation, option, ec);  }  /// Perform an IO control command on the socket.  /**   * This function is used to execute an IO control command on the socket.   *   * @param command The IO control command to be performed on the socket.   *   * @throws asio::system_error Thrown on failure.   *   * @sa IoControlCommand @n   * asio::socket_base::bytes_readable @n   * asio::socket_base::non_blocking_io   *   * @par Example   * Getting the number of bytes ready to read:   * @code   * asio::ip::tcp::socket socket(io_service);   * ...   * asio::ip::tcp::socket::bytes_readable command;   * socket.io_control(command);   * std::size_t bytes_readable = command.get();   * @endcode   */  template <typename IoControlCommand>  void io_control(IoControlCommand& command)  {    asio::error_code ec;    this->service.io_control(this->implementation, command, ec);    asio::detail::throw_error(ec);  }  /// Perform an IO control command on the socket.  /**   * This function is used to execute an IO control command on the socket.   *   * @param command The IO control command to be performed on the socket.   *   * @param ec Set to indicate what error occurred, if any.   *   * @sa IoControlCommand @n   * asio::socket_base::bytes_readable @n   * asio::socket_base::non_blocking_io   *   * @par Example   * Getting the number of bytes ready to read:   * @code   * asio::ip::tcp::socket socket(io_service);   * ...   * asio::ip::tcp::socket::bytes_readable command;   * asio::error_code ec;   * socket.io_control(command, ec);   * if (ec)   * {   *   // An error occurred.   * }   * std::size_t bytes_readable = command.get();   * @endcode   */  template <typename IoControlCommand>  asio::error_code io_control(IoControlCommand& command,      asio::error_code& ec)  {    return this->service.io_control(this->implementation, command, ec);  }  /// Get the local endpoint of the socket.  /**   * This function is used to obtain the locally bound endpoint of the socket.   *   * @returns An object that represents the local endpoint of the socket.   *   * @throws asio::system_error Thrown on failure.   *   * @par Example   * @code   * asio::ip::tcp::socket socket(io_service);   * ...   * asio::ip::tcp::endpoint endpoint = socket.local_endpoint();   * @endcode   */  endpoint_type local_endpoint() const  {    asio::error_code ec;    endpoint_type ep = this->service.local_endpoint(this->implementation, ec);    asio::detail::throw_error(ec);    return ep;  }  /// Get the local endpoint of the socket.  /**   * This function is used to obtain the locally bound endpoint of the socket.   *   * @param ec Set to indicate what error occurred, if any.   *   * @returns An object that represents the local endpoint of the socket.   * Returns a default-constructed endpoint object if an error occurred.   *   * @par Example   * @code   * asio::ip::tcp::socket socket(io_service);   * ...   * asio::error_code ec;   * asio::ip::tcp::endpoint endpoint = socket.local_endpoint(ec);   * if (ec)   * {   *   // An error occurred.   * }   * @endcode   */  endpoint_type local_endpoint(asio::error_code& ec) const  {    return this->service.local_endpoint(this->implementation, ec);  }  /// Get the remote endpoint of the socket.  /**   * This function is used to obtain the remote endpoint of the socket.   *   * @returns An object that represents the remote endpoint of the socket.   *   * @throws asio::system_error Thrown on failure.   *   * @par Example   * @code   * asio::ip::tcp::socket socket(io_service);   * ...   * asio::ip::tcp::endpoint endpoint = socket.remote_endpoint();   * @endcode   */  endpoint_type remote_endpoint() const  {    asio::error_code ec;    endpoint_type ep = this->service.remote_endpoint(this->implementation, ec);    asio::detail::throw_error(ec);    return ep;  }  /// Get the remote endpoint of the socket.  /**   * This function is used to obtain the remote endpoint of the socket.   *   * @param ec Set to indicate what error occurred, if any.   *   * @returns An object that represents the remote endpoint of the socket.   * Returns a default-constructed endpoint object if an error occurred.   *   * @par Example   * @code   * asio::ip::tcp::socket socket(io_service);   * ...   * asio::error_code ec;   * asio::ip::tcp::endpoint endpoint = socket.remote_endpoint(ec);   * if (ec)   * {   *   // An error occurred.   * }   * @endcode   */  endpoint_type remote_endpoint(asio::error_code& ec) const  {    return this->service.remote_endpoint(this->implementation, ec);  }  /// Disable sends or receives on the socket.  /**   * This function is used to disable send operations, receive operations, or   * both.   *   * @param what Determines what types of operation will no longer be allowed.   *   * @throws asio::system_error Thrown on failure.   *   * @par Example   * Shutting down the send side of the socket:   * @code   * asio::ip::tcp::socket socket(io_service);   * ...   * socket.shutdown(asio::ip::tcp::socket::shutdown_send);   * @endcode   */  void shutdown(shutdown_type what)  {    asio::error_code ec;    this->service.shutdown(this->implementation, what, ec);    asio::detail::throw_error(ec);  }  /// Disable sends or receives on the socket.  /**   * This function is used to disable send operations, receive operations, or   * both.   *   * @param what Determines what types of operation will no longer be allowed.   *   * @param ec Set to indicate what error occurred, if any.   *   * @par Example   * Shutting down the send side of the socket:   * @code   * asio::ip::tcp::socket socket(io_service);   * ...   * asio::error_code ec;   * socket.shutdown(asio::ip::tcp::socket::shutdown_send, ec);   * if (ec)   * {   *   // An error occurred.   * }   * @endcode   */  asio::error_code shutdown(shutdown_type what,      asio::error_code& ec)  {    return this->service.shutdown(this->implementation, what, ec);  }protected:  /// Protected destructor to prevent deletion through this type.  ~basic_socket()  {  }};} // namespace asio#include "asio/detail/pop_options.hpp"#endif // ASIO_BASIC_SOCKET_HPP

⌨️ 快捷键说明

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