WebSocket++  0.8.3-dev
C++ websocket client/server library
Public Types | Public Member Functions | Protected Member Functions | List of all members
websocketpp::transport::asio::endpoint< config > Class Template Reference

Asio based endpoint transport component. More...

#include <endpoint.hpp>

Public Types

typedef endpoint< config > type
 Type of this endpoint transport component.
 
typedef config::concurrency_type concurrency_type
 Type of the concurrency policy.
 
typedef config::socket_type socket_type
 Type of the socket policy.
 
typedef config::elog_type elog_type
 Type of the error logging policy.
 
typedef config::alog_type alog_type
 Type of the access logging policy.
 
typedef socket_type::socket_con_type socket_con_type
 Type of the socket connection component.
 
typedef socket_con_type::ptr socket_con_ptr
 Type of a shared pointer to the socket connection component.
 
typedef asio::connection< config > transport_con_type
 
typedef transport_con_type::ptr transport_con_ptr
 
typedef lib::asio::io_service * io_service_ptr
 Type of a pointer to the ASIO io_service being used.
 
typedef lib::shared_ptr< lib::asio::ip::tcp::acceptor > acceptor_ptr
 Type of a shared pointer to the acceptor being used.
 
typedef lib::shared_ptr< lib::asio::ip::tcp::resolver > resolver_ptr
 Type of a shared pointer to the resolver being used.
 
typedef lib::shared_ptr< lib::asio::steady_timer > timer_ptr
 Type of timer handle.
 
typedef lib::shared_ptr< lib::asio::io_service::work > work_ptr
 Type of a shared pointer to an io_service work object.
 
typedef lib::function< lib::error_code(acceptor_ptr)> tcp_pre_bind_handler
 Type of socket pre-bind handler.
 

Public Member Functions

bool is_secure () const
 Return whether or not the endpoint produces secure connections.
 
void init_asio (io_service_ptr ptr, lib::error_code &ec)
 initialize asio transport with external io_service (exception free) More...
 
void init_asio (io_service_ptr ptr)
 initialize asio transport with external io_service More...
 
void init_asio (lib::error_code &ec)
 Initialize asio transport with internal io_service (exception free) More...
 
void init_asio ()
 Initialize asio transport with internal io_service. More...
 
void set_tcp_pre_bind_handler (tcp_pre_bind_handler h)
 Sets the tcp pre bind handler. More...
 
void set_tcp_pre_init_handler (tcp_init_handler h)
 Sets the tcp pre init handler. More...
 
void set_tcp_init_handler (tcp_init_handler h)
 Sets the tcp pre init handler (deprecated) More...
 
void set_tcp_post_init_handler (tcp_init_handler h)
 Sets the tcp post init handler. More...
 
void set_listen_backlog (int backlog)
 Sets the maximum length of the queue of pending connections. More...
 
void set_reuse_addr (bool value)
 Sets whether to use the SO_REUSEADDR flag when opening listening sockets. More...
 
lib::asio::io_service & get_io_service ()
 Retrieve a reference to the endpoint's io_service. More...
 
lib::asio::ip::tcp::endpoint get_local_endpoint (lib::asio::error_code &ec)
 Get local TCP endpoint. More...
 
void listen (lib::asio::ip::tcp::endpoint const &ep, lib::error_code &ec)
 Set up endpoint for listening manually (exception free) More...
 
void listen (lib::asio::ip::tcp::endpoint const &ep)
 Set up endpoint for listening manually. More...
 
template<typename InternetProtocol >
void listen (InternetProtocol const &internet_protocol, uint16_t port, lib::error_code &ec)
 Set up endpoint for listening with protocol and port (exception free) More...
 
template<typename InternetProtocol >
void listen (InternetProtocol const &internet_protocol, uint16_t port)
 Set up endpoint for listening with protocol and port. More...
 
void listen (uint16_t port, lib::error_code &ec)
 Set up endpoint for listening on a port (exception free) More...
 
void listen (uint16_t port)
 Set up endpoint for listening on a port. More...
 
void listen (std::string const &host, std::string const &service, lib::error_code &ec)
 Set up endpoint for listening on a host and service (exception free) More...
 
void listen (std::string const &host, std::string const &service)
 Set up endpoint for listening on a host and service. More...
 
void stop_listening (lib::error_code &ec)
 Stop listening (exception free) More...
 
void stop_listening ()
 Stop listening. More...
 
bool is_listening () const
 Check if the endpoint is listening. More...
 
std::size_t run ()
 wraps the run method of the internal io_service object
 
std::size_t run_one ()
 wraps the run_one method of the internal io_service object More...
 
void stop ()
 wraps the stop method of the internal io_service object
 
std::size_t poll ()
 wraps the poll method of the internal io_service object
 
std::size_t poll_one ()
 wraps the poll_one method of the internal io_service object
 
void reset ()
 wraps the reset method of the internal io_service object
 
bool stopped () const
 wraps the stopped method of the internal io_service object
 
void start_perpetual ()
 Marks the endpoint as perpetual, stopping it from exiting when empty. More...
 
void stop_perpetual ()
 Clears the endpoint's perpetual flag, allowing it to exit when empty. More...
 
timer_ptr set_timer (long duration, timer_handler callback)
 Call back a function after a period of time. More...
 
void handle_timer (timer_ptr, timer_handler callback, lib::asio::error_code const &ec)
 Timer handler. More...
 
void async_accept (transport_con_ptr tcon, accept_handler callback, lib::error_code &ec)
 Accept the next connection attempt and assign it to con (exception free) More...
 
void async_accept (transport_con_ptr tcon, accept_handler callback)
 Accept the next connection attempt and assign it to con. More...
 

Protected Member Functions

void init_logging (const lib::shared_ptr< alog_type > &a, const lib::shared_ptr< elog_type > &e)
 Initialize logging. More...
 
void handle_accept (accept_handler callback, lib::asio::error_code const &asio_ec)
 
void async_connect (transport_con_ptr tcon, uri_ptr u, connect_handler cb)
 Initiate a new connection.
 
void handle_resolve_timeout (timer_ptr, connect_handler callback, lib::error_code const &ec)
 DNS resolution timeout handler. More...
 
void handle_resolve (transport_con_ptr tcon, timer_ptr dns_timer, connect_handler callback, lib::asio::error_code const &ec, lib::asio::ip::tcp::resolver::iterator iterator)
 
void handle_connect_timeout (transport_con_ptr tcon, timer_ptr, connect_handler callback, lib::error_code const &ec)
 Asio connect timeout handler. More...
 
void handle_connect (transport_con_ptr tcon, timer_ptr con_timer, connect_handler callback, lib::asio::error_code const &ec)
 
lib::error_code init (transport_con_ptr tcon)
 Initialize a connection. More...
 

Detailed Description

template<typename config>
class websocketpp::transport::asio::endpoint< config >

Asio based endpoint transport component.

transport::asio::endpoint implements an endpoint transport component using Asio.

Definition at line 143 of file base.hpp.

Member Typedef Documentation

◆ transport_con_ptr

Type of a shared pointer to the connection transport component associated with this endpoint transport component

Definition at line 78 of file endpoint.hpp.

◆ transport_con_type

template<typename config >
typedef asio::connection<config> websocketpp::transport::asio::endpoint< config >::transport_con_type

Type of the connection transport component associated with this endpoint transport component

Definition at line 75 of file endpoint.hpp.

Member Function Documentation

◆ async_accept() [1/2]

template<typename config >
void websocketpp::transport::asio::endpoint< config >::async_accept ( transport_con_ptr  tcon,
accept_handler  callback 
)
inline

Accept the next connection attempt and assign it to con.

Parameters
tconThe connection to accept into.
callbackThe function to call when the operation is complete.

Definition at line 807 of file endpoint.hpp.

◆ async_accept() [2/2]

template<typename config >
void websocketpp::transport::asio::endpoint< config >::async_accept ( transport_con_ptr  tcon,
accept_handler  callback,
lib::error_code &  ec 
)
inline

Accept the next connection attempt and assign it to con (exception free)

Parameters
tconThe connection to accept into.
callbackThe function to call when the operation is complete.
ecA status code indicating an error, if any.

Definition at line 768 of file endpoint.hpp.

◆ get_io_service()

template<typename config >
lib::asio::io_service& websocketpp::transport::asio::endpoint< config >::get_io_service ( )
inline

Retrieve a reference to the endpoint's io_service.

The io_service may be an internal or external one. This may be used to call methods of the io_service that are not explicitly wrapped by the endpoint.

This method is only valid after the endpoint has been initialized with init_asio. No error will be returned if it isn't.

Returns
A reference to the endpoint's io_service

Definition at line 378 of file endpoint.hpp.

◆ get_local_endpoint()

template<typename config >
lib::asio::ip::tcp::endpoint websocketpp::transport::asio::endpoint< config >::get_local_endpoint ( lib::asio::error_code &  ec)
inline

Get local TCP endpoint.

Extracts the local endpoint from the acceptor. This represents the address that WebSocket++ is listening on.

Sets a bad_descriptor error if the acceptor is not currently listening or otherwise unavailable.

Since
0.7.0
Parameters
ecSet to indicate what error occurred, if any.
Returns
The local endpoint

Definition at line 395 of file endpoint.hpp.

◆ handle_connect_timeout()

template<typename config >
void websocketpp::transport::asio::endpoint< config >::handle_connect_timeout ( transport_con_ptr  tcon,
timer_ptr  ,
connect_handler  callback,
lib::error_code const &  ec 
)
inlineprotected

Asio connect timeout handler.

The timer pointer is included to ensure the timer isn't destroyed until after it has expired.

Parameters
tconPointer to the transport connection that is being connected
con_timerPointer to the timer in question
callbackThe function to call back
ecA status code indicating an error, if any.

Definition at line 1053 of file endpoint.hpp.

◆ handle_resolve_timeout()

template<typename config >
void websocketpp::transport::asio::endpoint< config >::handle_resolve_timeout ( timer_ptr  ,
connect_handler  callback,
lib::error_code const &  ec 
)
inlineprotected

DNS resolution timeout handler.

The timer pointer is included to ensure the timer isn't destroyed until after it has expired.

Parameters
dns_timerPointer to the timer in question
callbackThe function to call back
ecA status code indicating an error, if any.

Definition at line 944 of file endpoint.hpp.

◆ handle_timer()

template<typename config >
void websocketpp::transport::asio::endpoint< config >::handle_timer ( timer_ptr  ,
timer_handler  callback,
lib::asio::error_code const &  ec 
)
inline

Timer handler.

The timer pointer is included to ensure the timer isn't destroyed until after it has expired.

Parameters
tPointer to the timer in question
callbackThe function to call back
ecA status code indicating an error, if any.

Definition at line 745 of file endpoint.hpp.

◆ init()

template<typename config >
lib::error_code websocketpp::transport::asio::endpoint< config >::init ( transport_con_ptr  tcon)
inlineprotected

Initialize a connection.

init is called by an endpoint once for each newly created connection. It's purpose is to give the transport policy the chance to perform any transport specific initialization that couldn't be done via the default constructor.

Parameters
tconA pointer to the transport portion of the connection.
Returns
A status code indicating the success or failure of the operation

Definition at line 1113 of file endpoint.hpp.

◆ init_asio() [1/4]

template<typename config >
void websocketpp::transport::asio::endpoint< config >::init_asio ( )
inline

Initialize asio transport with internal io_service.

This method of initialization will allocate and use an internally managed io_service.

See also
init_asio(io_service_ptr ptr)

Definition at line 249 of file endpoint.hpp.

◆ init_asio() [2/4]

template<typename config >
void websocketpp::transport::asio::endpoint< config >::init_asio ( io_service_ptr  ptr)
inline

initialize asio transport with external io_service

Initialize the ASIO transport policy for this endpoint using the provided io_service object. asio_init must be called exactly once on any endpoint that uses transport::asio before it can be used.

Parameters
ptrA pointer to the io_service to use for asio events

Definition at line 212 of file endpoint.hpp.

◆ init_asio() [3/4]

template<typename config >
void websocketpp::transport::asio::endpoint< config >::init_asio ( io_service_ptr  ptr,
lib::error_code &  ec 
)
inline

initialize asio transport with external io_service (exception free)

Initialize the ASIO transport policy for this endpoint using the provided io_service object. asio_init must be called exactly once on any endpoint that uses transport::asio before it can be used.

Parameters
ptrA pointer to the io_service to use for asio events
ecSet to indicate what error occurred, if any.

Definition at line 185 of file endpoint.hpp.

◆ init_asio() [4/4]

template<typename config >
void websocketpp::transport::asio::endpoint< config >::init_asio ( lib::error_code &  ec)
inline

Initialize asio transport with internal io_service (exception free)

This method of initialization will allocate and use an internally managed io_service.

See also
init_asio(io_service_ptr ptr)
Parameters
ecSet to indicate what error occurred, if any.

Definition at line 227 of file endpoint.hpp.

◆ init_logging()

template<typename config >
void websocketpp::transport::asio::endpoint< config >::init_logging ( const lib::shared_ptr< alog_type > &  a,
const lib::shared_ptr< elog_type > &  e 
)
inlineprotected

Initialize logging.

The loggers are located in the main endpoint class. As such, the transport doesn't have direct access to them. This method is called by the endpoint constructor to allow shared logging from the transport component. These are raw pointers to member variables of the endpoint. In particular, they cannot be used in the transport constructor as they haven't been constructed yet, and cannot be used in the transport destructor as they will have been destroyed by then.

Definition at line 823 of file endpoint.hpp.

◆ is_listening()

template<typename config >
bool websocketpp::transport::asio::endpoint< config >::is_listening ( ) const
inline

Check if the endpoint is listening.

Returns
Whether or not the endpoint is listening.

Definition at line 635 of file endpoint.hpp.

◆ listen() [1/8]

template<typename config >
template<typename InternetProtocol >
void websocketpp::transport::asio::endpoint< config >::listen ( InternetProtocol const &  internet_protocol,
uint16_t  port 
)
inline

Set up endpoint for listening with protocol and port.

Bind the internal acceptor using the given internet protocol and port. The endpoint must have been initialized by calling init_asio before listening.

Common options include:

  • IPv6 with mapped IPv4 for dual stack hosts lib::asio::ip::tcp::v6()
  • IPv4 only: lib::asio::ip::tcp::v4()
Parameters
internet_protocolThe internet protocol to use.
portThe port to listen on.

Definition at line 502 of file endpoint.hpp.

◆ listen() [2/8]

template<typename config >
template<typename InternetProtocol >
void websocketpp::transport::asio::endpoint< config >::listen ( InternetProtocol const &  internet_protocol,
uint16_t  port,
lib::error_code &  ec 
)
inline

Set up endpoint for listening with protocol and port (exception free)

Bind the internal acceptor using the given internet protocol and port. The endpoint must have been initialized by calling init_asio before listening.

Common options include:

  • IPv6 with mapped IPv4 for dual stack hosts lib::asio::ip::tcp::v6()
  • IPv4 only: lib::asio::ip::tcp::v4()
Parameters
internet_protocolThe internet protocol to use.
portThe port to listen on.
ecSet to indicate what error occurred, if any.

Definition at line 481 of file endpoint.hpp.

◆ listen() [3/8]

template<typename config >
void websocketpp::transport::asio::endpoint< config >::listen ( lib::asio::ip::tcp::endpoint< config > const &  ep)
inline

Set up endpoint for listening manually.

Bind the internal acceptor using the settings specified by the endpoint e

Parameters
epAn endpoint to read settings from

Definition at line 460 of file endpoint.hpp.

◆ listen() [4/8]

template<typename config >
void websocketpp::transport::asio::endpoint< config >::listen ( lib::asio::ip::tcp::endpoint< config > const &  ep,
lib::error_code &  ec 
)
inline

Set up endpoint for listening manually (exception free)

Bind the internal acceptor using the specified settings. The endpoint must have been initialized by calling init_asio before listening.

Parameters
epAn endpoint to read settings from
ecSet to indicate what error occurred, if any.

Definition at line 412 of file endpoint.hpp.

◆ listen() [5/8]

template<typename config >
void websocketpp::transport::asio::endpoint< config >::listen ( std::string const &  host,
std::string const &  service 
)
inline

Set up endpoint for listening on a host and service.

Bind the internal acceptor using the given host and service. More details about what host and service can be are available in the Asio documentation for ip::basic_resolver_query::basic_resolver_query's constructors.

The endpoint must have been initialized by calling init_asio before listening.

Parameters
hostA string identifying a location. May be a descriptive name or a numeric address string.
serviceA string identifying the requested service. This may be a descriptive name or a numeric string corresponding to a port number.
ecSet to indicate what error occurred, if any.

Definition at line 589 of file endpoint.hpp.

◆ listen() [6/8]

template<typename config >
void websocketpp::transport::asio::endpoint< config >::listen ( std::string const &  host,
std::string const &  service,
lib::error_code &  ec 
)
inline

Set up endpoint for listening on a host and service (exception free)

Bind the internal acceptor using the given host and service. More details about what host and service can be are available in the Asio documentation for ip::basic_resolver_query::basic_resolver_query's constructors.

The endpoint must have been initialized by calling init_asio before listening.

Parameters
hostA string identifying a location. May be a descriptive name or a numeric address string.
serviceA string identifying the requested service. This may be a descriptive name or a numeric string corresponding to a port number.
ecSet to indicate what error occurred, if any.

Definition at line 556 of file endpoint.hpp.

◆ listen() [7/8]

template<typename config >
void websocketpp::transport::asio::endpoint< config >::listen ( uint16_t  port)
inline

Set up endpoint for listening on a port.

Bind the internal acceptor using the given port. The IPv6 protocol with mapped IPv4 for dual stack hosts will be used. If you need IPv4 only use the overload that allows specifying the protocol explicitly.

The endpoint must have been initialized by calling init_asio before listening.

Parameters
portThe port to listen on.
ecSet to indicate what error occurred, if any.

Definition at line 536 of file endpoint.hpp.

◆ listen() [8/8]

template<typename config >
void websocketpp::transport::asio::endpoint< config >::listen ( uint16_t  port,
lib::error_code &  ec 
)
inline

Set up endpoint for listening on a port (exception free)

Bind the internal acceptor using the given port. The IPv6 protocol with mapped IPv4 for dual stack hosts will be used. If you need IPv4 only use the overload that allows specifying the protocol explicitly.

The endpoint must have been initialized by calling init_asio before listening.

Parameters
portThe port to listen on.
ecSet to indicate what error occurred, if any.

Definition at line 520 of file endpoint.hpp.

◆ run_one()

template<typename config >
std::size_t websocketpp::transport::asio::endpoint< config >::run_one ( )
inline

wraps the run_one method of the internal io_service object

Since
0.3.0-alpha4

Definition at line 648 of file endpoint.hpp.

◆ set_listen_backlog()

template<typename config >
void websocketpp::transport::asio::endpoint< config >::set_listen_backlog ( int  backlog)
inline

Sets the maximum length of the queue of pending connections.

Sets the maximum length of the queue of pending connections. Increasing this will allow WebSocket++ to queue additional incoming connections. Setting it higher may prevent failed connections at high connection rates but may cause additional latency.

For this value to take effect you may need to adjust operating system settings.

New values affect future calls to listen only.

The default value is specified as *::asio::socket_base::max_connections which uses the operating system defined maximum queue length. Your OS may restrict or silently lower this value. A value of zero may cause all connections to be rejected.

Since
0.3.0
Parameters
backlogThe maximum length of the queue of pending connections

Definition at line 342 of file endpoint.hpp.

◆ set_reuse_addr()

template<typename config >
void websocketpp::transport::asio::endpoint< config >::set_reuse_addr ( bool  value)
inline

Sets whether to use the SO_REUSEADDR flag when opening listening sockets.

Specifies whether or not to use the SO_REUSEADDR TCP socket option. What this flag does depends on your operating system.

Please consult operating system documentation for more details. There may be security consequences to enabling this option.

New values affect future calls to listen only so set this value prior to calling listen.

The default is false.

Since
0.3.0
Parameters
valueWhether or not to use the SO_REUSEADDR option

Definition at line 363 of file endpoint.hpp.

◆ set_tcp_init_handler()

template<typename config >
void websocketpp::transport::asio::endpoint< config >::set_tcp_init_handler ( tcp_init_handler  h)
inline

Sets the tcp pre init handler (deprecated)

The tcp pre init handler is called after the raw tcp connection has been established but before any additional wrappers (proxy connects, TLS handshakes, etc) have been performed.

Deprecated:
Use set_tcp_pre_init_handler instead
Parameters
hThe handler to call on tcp pre init.

Definition at line 302 of file endpoint.hpp.

◆ set_tcp_post_init_handler()

template<typename config >
void websocketpp::transport::asio::endpoint< config >::set_tcp_post_init_handler ( tcp_init_handler  h)
inline

Sets the tcp post init handler.

The tcp post init handler is called after the tcp connection has been established and all additional wrappers (proxy connects, TLS handshakes, etc have been performed. This is fired before any bytes are read or any WebSocket specific handshake logic has been performed.

Since
0.3.0
Parameters
hThe handler to call on tcp post init.

Definition at line 317 of file endpoint.hpp.

◆ set_tcp_pre_bind_handler()

template<typename config >
void websocketpp::transport::asio::endpoint< config >::set_tcp_pre_bind_handler ( tcp_pre_bind_handler  h)
inline

Sets the tcp pre bind handler.

The tcp pre bind handler is called after the listen acceptor has been created but before the socket bind is performed.

Since
0.8.0
Parameters
hThe handler to call on tcp pre bind init.

Definition at line 274 of file endpoint.hpp.

◆ set_tcp_pre_init_handler()

template<typename config >
void websocketpp::transport::asio::endpoint< config >::set_tcp_pre_init_handler ( tcp_init_handler  h)
inline

Sets the tcp pre init handler.

The tcp pre init handler is called after the raw tcp connection has been established but before any additional wrappers (proxy connects, TLS handshakes, etc) have been performed.

Since
0.3.0
Parameters
hThe handler to call on tcp pre init.

Definition at line 288 of file endpoint.hpp.

◆ set_timer()

template<typename config >
timer_ptr websocketpp::transport::asio::endpoint< config >::set_timer ( long  duration,
timer_handler  callback 
)
inline

Call back a function after a period of time.

Sets a timer that calls back a function after the specified period of milliseconds. Returns a handle that can be used to cancel the timer. A cancelled timer will return the error code error::operation_aborted A timer that expired will return no error.

Parameters
durationLength of time to wait in milliseconds
callbackThe function to call back when the timer has expired
Returns
A handle that can be used to cancel the timer if it is no longer needed.

Definition at line 717 of file endpoint.hpp.

◆ start_perpetual()

template<typename config >
void websocketpp::transport::asio::endpoint< config >::start_perpetual ( )
inline

Marks the endpoint as perpetual, stopping it from exiting when empty.

Marks the endpoint as perpetual. Perpetual endpoints will not automatically exit when they run out of connections to process. To stop a perpetual endpoint call end_perpetual.

An endpoint may be marked perpetual at any time by any thread. It must be called either before the endpoint has run out of work or before it was started

Since
0.3.0

Definition at line 689 of file endpoint.hpp.

◆ stop_listening() [1/2]

template<typename config >
void websocketpp::transport::asio::endpoint< config >::stop_listening ( )
inline

Stop listening.

Stop listening and accepting new connections. This will not end any existing connections.

Since
0.3.0-alpha4

Definition at line 625 of file endpoint.hpp.

◆ stop_listening() [2/2]

template<typename config >
void websocketpp::transport::asio::endpoint< config >::stop_listening ( lib::error_code &  ec)
inline

Stop listening (exception free)

Stop listening and accepting new connections. This will not end any existing connections.

Since
0.3.0-alpha4
Parameters
ecA status code indicating an error, if any.

Definition at line 604 of file endpoint.hpp.

◆ stop_perpetual()

template<typename config >
void websocketpp::transport::asio::endpoint< config >::stop_perpetual ( )
inline

Clears the endpoint's perpetual flag, allowing it to exit when empty.

Clears the endpoint's perpetual flag. This will cause the endpoint's run method to exit normally when it runs out of connections. If there are currently active connections it will not end until they are complete.

Since
0.3.0

Definition at line 701 of file endpoint.hpp.


The documentation for this class was generated from the following files: