我正在尝试处理SSL错误情况,例如,SSL async_handshake()花费的时间太长。 一段时间后(比如20秒)我想关闭这个连接(lowest_layer()。close())。 我将带有连接对象的shared_ptr作为参数传递给async_handshake(),因此对象仍然存在,最终调用握手处理程序并且对象被销毁。
但是,我仍然在零星崩溃!看起来像close()SSL仍在尝试读取或操作读缓冲区。
所以,基本问题 - 硬连接()SSL连接是否安全?
有什么想法吗?
答案 0 :(得分:1)
通常我使用的方法在socket::cancel
上阻止未完成的异步操作,如documentation中所述。它们的处理程序将以asio::error::operation_aborted
作为错误参数调用,您需要以某种方式处理它。
尽管如此,我发现使用close
代替cancel
时没有问题。如果没有一些代码来分析,很难提供很多帮助或建议。
请注意,某些Windows平台在取消未完成的异步操作时会出现问题。如果您的应用程序需要支持Windows,则documentation has suggestions用于便携式取消。