gpt4 book ai didi

c++ - 如果不更改全局信号处理程序,是否可以强制 OpenSSL 不生成 SIGPIPE?

转载 作者:太空狗 更新时间:2023-10-29 20:40:11 25 4
gpt4 key购买 nike

我编写了引用静态 OpenSSL 库的静态库。 OpenSSL 有时会生成 SIGPIPE 并使程序崩溃。我知道可以使用 signal 函数全局禁用 SIGPIPE。然而,对于静态库来说,这样的要求并不优雅(不像共享库,你可以在初始化函数中调用 signal)。此外,不需要在程序中进行全局更改的方法要好得多,因为谁知道可能有任何其他库需要 SIGPIPE 并且会与需要忽略此信号的库发生冲突。我认为好的做法是仅更改 BIO 而别无其他。OpenSSL 使用套接字,套接字send 函数包含很好的解决方案(MSG_NOSIGNAL 标志)。 OpenSSL 有类似的解决方案吗?有什么方法可以设置 OpenSSL BIO,使其不会生成 SIGPIPE 并且不会使整个程序崩溃?

最佳答案

OpenSSL 本身不会生成SIGPIPE。但是,OpenSSL 使用套接字,如果您写入另一端已关闭的套接字,则会生成 SIGPIPE。如果你不想要这个,你必须处理 SIGPIPE(比如将它设置为 SIG_IGN)。这将导致写入返回 EPIPE 错误。

因为这种行为不是 OpenSSL 特有的,而是所有套接字共有的,并且因为这是一个全局设置,所以您不应该在您的库中更改它。您可能会在文档中提到它,但这只有在您期望用户不熟悉套接字的标准行为时才有必要。

关于c++ - 如果不更改全局信号处理程序,是否可以强制 OpenSSL 不生成 SIGPIPE?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25144550/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com