Boost.Asio SSL不正常关闭
我正在尝试处理SSL错误场景,例如,SSL async_handshake()花费的时间太长。 一段时间后(比如20秒),我想关闭这个连接(最底层().close())。 我将带有连接对象的shared_ptr作为参数传递给async_handshake(),这样对象仍然存在,最终调用握手处理程序并销毁对象 但是,我还是会偶尔撞车!看起来在close()之后,SSL仍在尝试读取或操作读取缓冲区 所以,基本问题是,硬关闭()SSL连接安全吗Boost.Asio SSL不正常关闭,boost,ssl,openssl,boost-asio,Boost,Ssl,Openssl,Boost Asio,我正在尝试处理SSL错误场景,例如,SSL async_handshake()花费的时间太长。 一段时间后(比如20秒),我想关闭这个连接(最底层().close())。 我将带有连接对象的shared_ptr作为参数传递给async_handshake(),这样对象仍然存在,最终调用握手处理程序并销毁对象 但是,我还是会偶尔撞车!看起来在close()之后,SSL仍在尝试读取或操作读取缓冲区 所以,基本问题是,硬关闭()SSL连接安全吗 有什么想法吗?通常我使用的停止套接字上未完成的异步操作的
有什么想法吗?通常我使用的停止套接字上未完成的异步操作的方法是
socket::cancel
,如中所述。它们的处理程序将以asio::error::operation\u aborted
作为错误参数调用,您需要以某种方式处理该参数
也就是说,我认为使用close
而不是cancel
没有问题。虽然如果没有一些代码进行分析,很难提供很多帮助或建议
请注意,某些Windows平台在取消未完成的异步操作时出现问题。如果您的应用程序需要支持Windows,则可用于便携式取消。这在异步握手情况下没有帮助,至少对我来说是这样。@PSIAlt使用
cancel()
添加了一个指向有关Windows平台和限制的文档的链接,谢谢,但我遇到了与linux上的OP相同的问题。它很容易复制:设置异步握手和设置截止期计时器大约2-5毫秒。在此计时器上,我使用最低层()关闭ssl::stream
的底层连接。关闭()
并在ssl\u connect
中转储应用程序核心。。不知道如何修复,只是现在增加了计时器