openssl bio疑问

发布于 2022-09-01 18:35:27 字数 444 浏览 8 评论 0

1.openssl bio ssl通信,当server关闭后,client BIO_read返回的是0,BIO_write写入数据也没报错,正常返回,但是此时调用BIO_free_all,进程异常退出。(client的socket被设置为nonblack)。

2.server未断开也未返回数据的时候BIO_read返回的是-1,

大家有遇到吗?请问怎么准确的判断出server端断开了socket,还有server断开后,为什么free会导致进程退出?


经过debug,发现server关闭后,write会产生一个broken pipe信号,默认自动退出进程,手动处理SIGPIPE信号,问题解决。

void sigpipe_handle(){
}

signal(SIGPIPE , sigpipe_handle);

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

牵你手 2022-09-08 18:35:27

测试1:

1.启动server
2.client连接server
3.关闭server.
4.client BIO_write数据未报任何错误,返回的size也大于0.
5.client BIO_read返回0.
6.free SSL_CTX,未异常。
7.BIO_free_all异常退出,但是未生成core。

测试2

1.启动server
2.client连接server
3.关闭server.
4.client BIO_read返回0.
5.free SSL_CTX,未异常。
6.BIO_free_all,未异常。

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文