123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216 |
- //
- // Copyright (c) 2016-2019 Vinnie Falco (vinnie dot falco at gmail 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)
- //
- // Official repository: https://github.com/boostorg/beast
- //
- #ifndef BOOST_BEAST_WEBSOCKET_TEARDOWN_HPP
- #define BOOST_BEAST_WEBSOCKET_TEARDOWN_HPP
- #include <boost/beast/core/detail/config.hpp>
- #include <boost/beast/core/error.hpp>
- #include <boost/beast/core/role.hpp>
- #include <boost/asio/basic_stream_socket.hpp>
- #include <type_traits>
- namespace boost {
- namespace beast {
- namespace websocket {
- /** Tear down a connection.
- This tears down a connection. The implementation will call
- the overload of this function based on the `Socket` parameter
- used to consruct the socket. When `Socket` is a user defined
- type, and not a `net::ip::tcp::socket` or any
- `net::ssl::stream`, callers are responsible for
- providing a suitable overload of this function.
- @note
- This function serves as a customization point and is not intended
- to be called directly.
- @param role The role of the local endpoint
- @param socket The socket to tear down.
- @param ec Set to the error if any occurred.
- */
- template<class Socket>
- void
- teardown(
- role_type role,
- Socket& socket,
- error_code& ec)
- {
- boost::ignore_unused(role, socket, ec);
- /*
- If you are trying to use OpenSSL and this goes off, you need to
- add an include for <boost/beast/websocket/ssl.hpp>.
- If you are creating an instance of beast::websocket::stream with your
- own user defined type, you must provide an overload of teardown with
- the corresponding signature (including the role_type).
- */
- static_assert(sizeof(Socket)==-1,
- "Unknown Socket type in teardown.");
- }
- /** Start tearing down a connection.
- This begins tearing down a connection asynchronously.
- The implementation will call the overload of this function
- based on the `Socket` parameter used to consruct the socket.
- When `Stream` is a user defined type, and not a
- `net::ip::tcp::socket` or any `net::ssl::stream`,
- callers are responsible for providing a suitable overload
- of this function.
- @note
- This function serves as a customization point and is not intended
- to be called directly.
- @param role The role of the local endpoint
- @param socket The socket to tear down.
- @param handler The completion handler to invoke when the operation
- completes. The implementation takes ownership of the handler by
- performing a decay-copy. The equivalent function signature of
- the handler must be:
- @code
- void handler(
- error_code const& error // result of operation
- );
- @endcode
- If the handler has an associated immediate executor,
- an immediate completion will be dispatched to it.
- Otherwise, the handler will not be invoked from within
- this function. Invocation of the handler will be performed in a
- manner equivalent to using `net::post`.
- */
- template<
- class Socket,
- class TeardownHandler>
- void
- async_teardown(
- role_type role,
- Socket& socket,
- TeardownHandler&& handler)
- {
- boost::ignore_unused(role, socket, handler);
- /*
- If you are trying to use OpenSSL and this goes off, you need to
- add an include for <boost/beast/websocket/ssl.hpp>.
- If you are creating an instance of beast::websocket::stream with your
- own user defined type, you must provide an overload of teardown with
- the corresponding signature (including the role_type).
- */
- static_assert(sizeof(Socket)==-1,
- "Unknown Socket type in async_teardown.");
- }
- } // websocket
- //------------------------------------------------------------------------------
- namespace websocket {
- /** Tear down a `net::ip::tcp::socket`.
- This tears down a connection. The implementation will call
- the overload of this function based on the `Stream` parameter
- used to consruct the socket. When `Stream` is a user defined
- type, and not a `net::ip::tcp::socket` or any
- `net::ssl::stream`, callers are responsible for
- providing a suitable overload of this function.
- @note
- This function serves as a customization point and is not intended
- to be called directly.
- @param role The role of the local endpoint
- @param socket The socket to tear down.
- @param ec Set to the error if any occurred.
- */
- template<class Protocol, class Executor>
- void
- teardown(
- role_type role,
- net::basic_stream_socket<
- Protocol, Executor>& socket,
- error_code& ec);
- /** Start tearing down a `net::ip::tcp::socket`.
- This begins tearing down a connection asynchronously.
- The implementation will call the overload of this function
- based on the `Stream` parameter used to consruct the socket.
- When `Stream` is a user defined type, and not a
- `net::ip::tcp::socket` or any `net::ssl::stream`,
- callers are responsible for providing a suitable overload
- of this function.
- @note
- This function serves as a customization point and is not intended
- to be called directly.
- @param role The role of the local endpoint
- @param socket The socket to tear down.
- @param handler The completion handler to invoke when the operation
- completes. The implementation takes ownership of the handler by
- performing a decay-copy. The equivalent function signature of
- the handler must be:
- @code
- void handler(
- error_code const& error // result of operation
- );
- @endcode
- If the handler has an associated immediate executor,
- an immediate completion will be dispatched to it.
- Otherwise, the handler will not be invoked from within
- this function. Invocation of the handler will be performed in a
- manner equivalent to using `net::post`.
- @par Per-Operation Cancellation
- This asynchronous operation supports cancellation for the following
- net::cancellation_type values:
- @li @c net::cancellation_type::terminal
- @li @c net::cancellation_type::partial
- @li @c net::cancellation_type::total
- if they are also supported by the socket's @c async_wait operation.
- */
- template<
- class Protocol, class Executor,
- class TeardownHandler>
- void
- async_teardown(
- role_type role,
- net::basic_stream_socket<
- Protocol, Executor>& socket,
- TeardownHandler&& handler);
- } // websocket
- } // beast
- } // boost
- #include <boost/beast/websocket/impl/teardown.hpp>
- #endif
|