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);
测试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
,未异常。