Asio SSL流线程安全

时间:2013-03-05 06:51:42

标签: multithreading ssl thread-safety boost-asio

我正在检查关于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对我来说似乎也没有任何好处,因为当调用这些处理程序时,数据已经被读取并复制到用户定义的缓冲区中。

谢谢

1 个答案:

答案 0 :(得分:1)

在谷歌搜索后我发现了我找到的东西。 解决方案是在示例HTTP Server 3中,它在completition处理程序上使用strand。 尽管我仍然不明白它是如何起作用的,但它确实阻止了并发SSL操作,因此不会导致我的程序崩溃。