我使用OpenSSL并调用SSL_write(),它最终调用::send()。然而,当通信量太大时,另一端偶尔会断开连接。因此,在我的下一次写入时,::send()抛出异常。我希望避免这种情况,并返回一个错误代码,以便重新启动应用程序。如果我自己调用::send(),我可以传递MSG_NOSIGNAL标志,这会导致::send()返回一个错误代码,但是,我没有看到SSL_write()有这样的参数。有什么我可以做的吗?
SSL_write()
::send()
MSG_NOSIGNAL
pcww981p1#
...防止::send()抛出异常您可能指的是触发信号SIGPIPE,而不是“抛出异常”。如果希望完全控制SSL堆栈的输入和输出,请使用自己的BIO。如果你想在所有套接字上全局返回EPIPE而不是触发SIGPIPE,只需将SIGPIPE的信号处理程序设置为SIG_IGN。如果你想控制单个套接字的SIGPIPE,你可以在一些系统上使用setsockopt来完成。
1条答案
按热度按时间pcww981p1#
...防止::send()抛出异常
您可能指的是触发信号SIGPIPE,而不是“抛出异常”。
如果希望完全控制SSL堆栈的输入和输出,请使用自己的BIO。
如果你想在所有套接字上全局返回EPIPE而不是触发SIGPIPE,只需将SIGPIPE的信号处理程序设置为SIG_IGN。如果你想控制单个套接字的SIGPIPE,你可以在一些系统上使用setsockopt来完成。