我正在仔细检查Asio,SSL部分的文档,并遇到了ssl::stream

和线程安全声明:
Shared objects: Unsafe. The application must also ensure that all asynchronous operations are performed within the same implicit or explicit strand.
现在,我了解到OpenSSL BIO不会允许并发SSL_ReadSSL_Write操作,但是我无处找不到可以与strand一起使用的功能。


因为(据我所知)不应使用strand.post(async_read) / strand.post(async_write)确保并发的SSL_ReadSSL_Write不会发生,因为即使这些异步函数不会立即执行,它们也会立即返回因此不读取任何数据。
在处理程序函数上使用strand似乎也不是一件好事(对我而言),因为调用这些处理程序时,数据已被读取并复制到用户定义的缓冲区中。


谢谢

最佳答案

好吧,经过更多的谷歌搜索后,我找到了我想要的东西。
解决方案是示例HTTP Server 3,它在完成处理程序上使用了strand。
即使我仍然不了解它如何提供帮助,但它确实阻止了并发SSL操作,因此不会使我的程序崩溃。

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

10-12 05:57