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);
阅读 4.1k
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,未异常。

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进