openssl bio疑问
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 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(1)
测试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
,未异常。