Boost.Asio SSL非常接近

时间:2011-04-15 05:10:49

标签: boost ssl openssl boost-asio

我正在尝试处理SSL错误情况,例如,SSL async_handshake()花费的时间太长。 一段时间后(比如20秒)我想关闭这个连接(lowest_layer()。close())。 我将带有连接对象的shared_ptr作为参数传递给async_handshake(),因此对象仍然存在,最终调用握手处理程序并且对象被销毁。

但是,我仍然在零星崩溃!看起来像close()SSL仍在尝试读取或操作读缓冲区。

所以,基本问题 - 硬连接()SSL连接是否安全?

有什么想法吗?

1 个答案:

答案 0 :(得分:1)

通常我使用的方法在socket::cancel上阻止未完成的异步操作,如documentation中所述。它们的处理程序将以asio::error::operation_aborted作为错误参数调用,您需要以某种方式处理它。

尽管如此,我发现使用close代替cancel时没有问题。如果没有一些代码来分析,很难提供很多帮助或建议。


请注意,某些Windows平台在取消未完成的异步操作时会出现问题。如果您的应用程序需要支持Windows,则documentation has suggestions用于便携式取消。