boost::asio::ssl::context 可以在多个 SSL 流之间共享吗?

Posted

技术标签:

【中文标题】boost::asio::ssl::context 可以在多个 SSL 流之间共享吗?【英文标题】:Can boost::asio::ssl::context be shared between multiple SSL streams? 【发布时间】:2015-11-04 10:35:54 【问题描述】:

在互联网上搜索了几个小时,我找不到我的问题的答案。

我的模型是这样的:我有一个共享的boost::asio::ssl::context,用于创建boost::asio::ssl::stream 的实例。然后流对象被传递给不同的线程。

这个模型线程安全吗?相同的boost::asio::ssl::context 可以用于构建将同时使用的不同 SSL 流对象吗?

,在将此问题标记为重复之前,请考虑仔细阅读说明。谢谢!

在我的具体情况下,线程之间没有共享对象。所以Boost.Asio SSL thread safety 线程安全中所说的任何内容都不会影响我的情况。我从单个线程访问boost::asio::ssl::context

【问题讨论】:

【参考方案1】:

因为 SSL 上下文需要在 SSL 会话之间共享(否则会话恢复将如何工作),所以 SSL 上下文类是完全内部线程安全的。您可以根据需要在多个 SSL 连接和多个线程中使用 SSL 上下文。

【讨论】:

但别忘了正确初始化libssl! 非常感谢您的帮助!这是我需要的断言。直觉上,我认为这应该是可能的并且有效。但是,当某些东西有效时,并不意味着它是正确的,并且可能会在另一台机器上中断。 @RichardHodges 我相信boost 应该在内部初始化其 SSL 后端。据我所知,它确实如此。 @GreenScape 这就是其他人的做法。真的没有别的办法了。 @GreenScape 刚刚查看了源代码。你是对的。 openssl 在asio::ssl::context_service的第一次实例化时初始化

以上是关于boost::asio::ssl::context 可以在多个 SSL 流之间共享吗?的主要内容,如果未能解决你的问题,请参考以下文章