从 SSL_CTX 创建一个 boost asio ssl 上下文
Create a boost asio ssl context from SSL_CTX
是否可以从现有的 SSL_CTX
创建一个 boost::asio::ssl::context
?
我想避免将所有选项从一个复制到另一个(因此有出现错误的风险)。
前两个构造函数I see are
/// Constructor.
BOOST_ASIO_DECL explicit context(method m);
/// Construct to take ownership of a native handle.
BOOST_ASIO_DECL explicit context(native_handle_type native_handle);
所以第二个在逻辑上就是你要找的那个:
#include <boost/asio.hpp>
#include <boost/asio/ssl.hpp>
int main() {
const SSL_METHOD* raw_method = SSLv23_server_method();
SSL_CTX* raw_ctx = SSL_CTX_new(raw_method);
boost::asio::ssl::context ctx(raw_ctx);
} // Note: no SSL_CTX_free(raw_ctx)!
注意:如果您使用此构造函数,它会取得所有权。这意味着您不得尝试释放上下文(或任何替代部分,(默认)密码应用程序用户数据),因为这会导致双重释放。无法从 asio::ssl::context
实例释放所有权。
是否可以从现有的 SSL_CTX
创建一个 boost::asio::ssl::context
?
我想避免将所有选项从一个复制到另一个(因此有出现错误的风险)。
前两个构造函数I see are
/// Constructor.
BOOST_ASIO_DECL explicit context(method m);
/// Construct to take ownership of a native handle.
BOOST_ASIO_DECL explicit context(native_handle_type native_handle);
所以第二个在逻辑上就是你要找的那个:
#include <boost/asio.hpp>
#include <boost/asio/ssl.hpp>
int main() {
const SSL_METHOD* raw_method = SSLv23_server_method();
SSL_CTX* raw_ctx = SSL_CTX_new(raw_method);
boost::asio::ssl::context ctx(raw_ctx);
} // Note: no SSL_CTX_free(raw_ctx)!
注意:如果您使用此构造函数,它会取得所有权。这意味着您不得尝试释放上下文(或任何替代部分,(默认)密码应用程序用户数据),因为这会导致双重释放。无法从 asio::ssl::context
实例释放所有权。