Boost.Asio SSL 非正常关闭

标签 boost ssl openssl boost-asio

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

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

那么,基本问题 - 硬关闭 () SSL 连接是否安全?

有什么想法吗?

最佳答案

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

也就是说,我没有看到使用 close 而不是 cancel 的问题。尽管没有一些代码来分析很难提供很多帮助或建议。


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

关于Boost.Asio SSL 非正常关闭,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5672621/

相关文章:

C++ Boost 图形库 : Building a vector of vertices visited in an undirected graph search?

c++ - boost::filesystem::path::append(通过迭代器)导致编译器错误

php - Laravel 5.2.31 Socialite 证书 ssl 错误

c++ - 有人可以解释 openssl cli 和 c++ DES 输出的区别吗

c++ - “AES_ctr128_encrypt”未在此范围内声明

c++ - boost thread_group 无限循环

c++ - Boost::process - 如何让它只运行一个进程?

ssl - 如何忽略远程桌面连接上的证书警告

javascript - 谷歌标签管理器给出混合内容错误

C 创建一个 Bignum 矩阵