我正在仔细检查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_Read
和SSL_Write
操作,但是我无处找不到可以与strand
一起使用的功能。
因为(据我所知)不应使用strand.post(async_read)
/ strand.post(async_write)
确保并发的SSL_Read
和SSL_Write
不会发生,因为即使这些异步函数不会立即执行,它们也会立即返回因此不读取任何数据。
在处理程序函数上使用strand
似乎也不是一件好事(对我而言),因为调用这些处理程序时,数据已被读取并复制到用户定义的缓冲区中。
谢谢
最佳答案
好吧,经过更多的谷歌搜索后,我找到了我想要的东西。
解决方案是示例HTTP Server 3,它在完成处理程序上使用了strand。
即使我仍然不了解它如何提供帮助,但它确实阻止了并发SSL操作,因此不会使我的程序崩溃。
关于multithreading - Asio SSL流线程安全,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/15217555/