[英]OpenSSL SSL_shutdown received signal SIGPIPE, Broken pipe
I'm writing a http/https client using openssl-0.9.8e 我正在使用openssl-0.9.8e编写http / https客户端
I get error when I call SSL_read()
调用
SSL_read()
时出现错误
then, I call SSL_get_error
get SSL_ERROR_SYSCALL
and errno ECONNRESET 104 /* Connection reset by peer */
然后,我呼叫
SSL_get_error
取得SSL_ERROR_SYSCALL
和errno ECONNRESET 104 /* Connection reset by peer */
accoring to SSL documetation that's what it means: 根据SSL文档,这意味着:
SSL_ERROR_SYSCALL
Some I/O error occurred. The OpenSSL error queue may contain more information on the error.
If the error queue is empty (i.e. ERR_get_error() returns 0), ret can be used to find out more about the
error: If ret == 0, an EOF was observed that violates the protocol. If ret == -1, the underlying BIO
reported an I/O error (for socket I/O on Unix systems, consult errno for details).
well, Connection reset, I call SSL_shutdown
to close connection, oh, Program received signal SIGPIPE, Broken pipe.
好了,重置连接,我调用
SSL_shutdown
关闭连接,哦, Program received signal SIGPIPE, Broken pipe.
断开Program received signal SIGPIPE, Broken pipe.
God, I call signal(SIGPIPE, SIG_IGN);
天哪,我叫
signal(SIGPIPE, SIG_IGN);
to ignore "SIGPIPE" signal,but it seem to does't work~ 忽略“ SIGPIPE”信号,但似乎不起作用〜
A Segmentation Fault happen 发生分段错误
#0 0x00000032bd00d96b in write () from /lib64/libpthread.so.0
#1 0x0000003add478367 in ?? () from /lib64/libcrypto.so.6
#2 0x0000003add4766fe in BIO_write () from /lib64/libcrypto.so.6
#3 0x0000003add8208fd in ssl3_write_pending () from /lib64/libssl.so.6
#4 0x0000003add820d9a in ssl3_dispatch_alert () from /lib64/libssl.so.6
#5 0x0000003add81e982 in ssl3_shutdown () from /lib64/libssl.so.6
#6 0x00000000004565d0 in CWsPollUrl::SSLClear (this=<value optimized out>, ctx=0x2aaab804a1b0, ssl=0x2aaab804a680)
at ../src/Wspoll.cpp:1122
#7 0x00000000004575e0 in CWsPollUrl::asyncEventDelete (this=0x4d422e50, eev=0x2aaab8001160) at ../src/Wspoll.cpp:1546
#8 0x000000000045928a in CWsPollUrl::onFail (this=0x4d422e50, eev=0x2aaab8001160, errorCode=4) at ../src/Wspoll.cpp:1523
#9 0x000000000045ab17 in CWsPollUrl::handleData (this=0x4d422e50, eev=0x2aaab8001160, len=<value optimized out>) at ../src/Wspoll.cpp:1259
#10 0x000000000045abcc in CWsPollUrl::asyncRecvEvent (this=0x4d422e50, fd=<value optimized out>, eev=0x2aaab8001160)
at ../src/Wspoll.cpp:1211
#11 0x00000000004636b5 in event_base_loop (base=0x14768360, flags=0) at event.c:1350
#12 0x0000000000456a62 in CWsPollUrl::run (this=<value optimized out>, param=<value optimized out>) at ../src/Wspoll.cpp:461
#13 0x0000000000436c5c in doPollUrl (data=<value optimized out>, user_data=<value optimized out>) at ../src/PollStrategy.cpp:151
#14 0x00000032bf44a95d in ?? () from /lib64/libglib-2.0.so.0
#15 0x00000032bf448e04 in ?? () from /lib64/libglib-2.0.so.0
#16 0x00000032bd00677d in start_thread () from /lib64/libpthread.so.0
#17 0x00000032bc4d3c1d in clone () from /lib64/libc.so.6
why I get SIGPIPE signal, I have already called signal(SIGPIPE, SIG_IGN);
为什么我收到SIGPIPE信号,我已经打电话给
signal(SIGPIPE, SIG_IGN);
Does anyone know why? 有人知道为什么吗?
Thanks in advance 提前致谢
If you get an I/O error with SSL_read it makes not much sense to call SSL_shutdown, because the shutdown tries to send a "close notify" shutdown alert to the peer and this will obviously not work on a broken connection. 如果您收到SSL_read的I / O错误,则调用SSL_shutdown并没有多大意义,因为关闭会尝试向对等方发送“关闭通知”关闭警报,这显然对断开的连接无效。 Therefore you get the SIGPIPE or EPIPE.
因此,您将获得SIGPIPE或EPIPE。 Getting ECONNRESET from SSL_read in this case probably means, that the client has closed the connection hard, eg without doing an SSL_shutdown.
在这种情况下,从SSL_read获取ECONNRESET可能意味着客户端已硬关闭了连接,例如未进行SSL_shutdown。 You should not continue working with the socket after the error, eg not even doing an SSL_shutdown.
错误发生后,您不应继续使用套接字,例如,甚至不要执行SSL_shutdown。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.