一个buffered_handshake令牌是一个完成令牌,用于完成签名 void(error_code, size_t)
.
作为buffered_handshake令牌的自由函数
void buffered_handshake_handler( const boost::system::error_code& ec, std::size_t bytes_transferred) { ... }
一个buffered_handshake令牌函数对象
struct buffered_handshake_handler { ... void operator()( const boost::system::error_code& ec, std::size_t bytes_transferred) { ... } ... };
一个lambda表达式作为buffered_handshake令牌
ssl_stream.async_handshake(..., [](const boost::system::error_code& ec, std::size_t bytes_transferred) { ... });
使用std::bind()
适配到buffered_handshake令牌的非静态类成员函数
void my_class::buffered_handshake_handler( const boost::system::error_code& ec, std::size_t bytes_transferred) { ... } ... ssl_stream.async_handshake(..., std::bind(&my_class::buffered_handshake_handler, this, std::placeholders::_1, std::placeholders::_2));
使用boost::bind()
适配到buffered_handshake令牌的非静态类成员函数
void my_class::buffered_handshake_handler( const boost::system::error_code& ec, std::size_t bytes_transferred) { ... } ... ssl_stream.async_handshake(..., boost::bind(&my_class::buffered_handshake_handler, this, boost::asio::placeholders::error, boost::asio::placeholders::bytes_transferred));
使用 use_future 作为缓冲握手令牌
std::future<std::size_t> f = ssl_stream.async_handshake(..., boost::asio::use_future); ... try { std::size_t n = f.get(); ... } catch (const system_error& e) { ... }
使用 use_awaitable 作为缓冲握手令牌
boost::asio::awaitable<void> my_coroutine() { try { ... std::size_t n = co_await ssl_stream.async_handshake( ..., boost::asio::use_awaitable); ... } catch (const system_error& e) { ... } }