gpt4 book ai didi

c++ - Boost.Asio SSL线程安全

转载 作者:塔克拉玛干 更新时间:2023-11-03 07:46:21 25 4
gpt4 key购买 nike

我要创建一个所有SSL套接字共享的链,还是每个SSL上下文创建一个链(由任何关联的套接字共享)?

Boost.Asio SSL文档对此进行了说明,但未提及上下文。我认为这意味着我必须对所有内容仅使用一个子程序,但是我认为这是在OpenSSL具有多线程支持之前编写的。

SSL and Threads

SSL stream objects perform no locking of their own. Therefore, it is essential that all asynchronous SSL operations are performed in an implicit or explicit strand. Note that this means that no synchronisation is required (and so no locking overhead is incurred) in single threaded programs.



我很可能仅会拥有一个SSL上下文,但是我想知道让该链属于SSL上下文或全局网络服务是否更合适。

我确实为 CRYPTO_set_locking_callback提供了一个处理程序,以防万一。

最佳答案

更新

大卫·施瓦兹(David Schwarz)对这个答案的要旨提出了质疑,我对此表示崇高的敬意。

有理由期望ssl上下文可以在线程之间共享-至少对于某些操作而言,至少是为了 boost SSL session 的恢复。

我认为David拥有OpenSSL使用SSL上下文的经验。 Boost ASIO依次使用它(至少在我所知道的所有平台上)。因此,David写了一个分享他的知识的答案,或者您/我将不得不花一些时间在OpenSSL文档和Boost Asio源代码上,以找出适用于Boost Asio的ssl::context使用的有效约束。

以下是当前记录的约束。

[后接旧答案文本]

Thread Safety



In general, it is safe to make concurrent use of distinct objects, but unsafe to make concurrent use of a single object. However, types such as io_service provide a stronger guarantee that it is safe to use a single object concurrently.



从逻辑上讲,因为文档没有特别提到 ssl_context类的线程安全性,所以必须得出结论,不是。

没关系,如果您使用某些特定的钩子(Hook)(如您提到的),则知道基础SSL库支持此功能。这仅告诉您,使 ssl_context具有线程意识可能并不困难。

但是直到您(与图书馆开发人员合作)提供此补丁,该补丁才可用。

长话短说,您可以从单个链访问每个 ssl_context

关于c++ - Boost.Asio SSL线程安全,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37612832/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com