c++ - 使用 libssl/libcrypto 的段错误

标签 c++ linux qt

这更像是一个假设,而我正在调试一些代码。假设我有一个应用程序(称为 X)调用一个库以通过 TLS 加密的 SMTP 连接发送电子邮件,同时 X 正在与另一个库交谈,该库通过相同的 libcrypto 库建立另一个 TLS 套接字,在某个函数调用因段错误而失败的特定(和怪异)情况下,出现这种情况的可能性有多大?

我有点抓不住稻草,这段代码工作得很好,直到我们添加了通过 TLS 连接到 Skype 服务器的 Skype SDK,从那时起我们实际上可以让问题重复,但我有点困惑至于为什么。 (我可能忽略了显而易见的事情,但我将从真正奇怪的可能性开始)

最佳答案

一般来说,这是可能的 - 但编写良好的库应该对多重访问具有鲁棒性。您可能需要查看文档以了解他们的 API 是否可重入(或者甚至是线程安全的)。

如果它是线程安全的,那么(假设 libcrypto 作者没有犯错)你可以确定这不是问题的原因。

如果它是可重入的,那么在两个(或更多)线程中使用这个库的任何东西都应该在访问时同步(例如使用互斥锁),但是如果部分代码不是您编写的并且您没有修改它的选项,那么你就卡住了。我唯一能想到的就是使用另一个版本的 libcrypto,因此系统会创建另一个不相关的内部结构实例。这是丑陋的灵魂,在用户机器上可能表现得很奇怪。

关于c++ - 使用 libssl/libcrypto 的段错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7713983/

相关文章:

c++: 解释这个函数声明

linux - 如何使用存在于根目录中的所有目录下的特定文件夹中的 shell 脚本列出所有文件?

c++ - 如何使用 QByteArray 读取 16 位整数

c++ - 从 CSV C++ 中提取 double 值时出现意外结果

java - 在 C++ 和 Java 之间共享定义或枚举

c++ - C++ 中具有可变参数签名的函数映射

regex - 尝试使用带正则表达式的 sed 替换字符串时出现未知选项

windows - 为什么 Windows 和 Linux 托管服务之间的价格差异如此之大

qt - 将 qml 项添加到 Qt3DQuickWindow

c++ - 计算 JSON 中的条目数并相应地执行代码