SSL错误C+中的SSL#U error#SYSCALL+;应用 在我的C++应用程序中,我在我的网络函数中使用了开放式SSL。 我看到,在成功连接到套接字之后,我的receive函数中出现了一个错误,该函数使用SSL\u read:SSL\u error\u SYS\u调用。 根据SSL文档,这就是它的含义:

SSL错误C+中的SSL#U error#SYSCALL+;应用 在我的C++应用程序中,我在我的网络函数中使用了开放式SSL。 我看到,在成功连接到套接字之后,我的receive函数中出现了一个错误,该函数使用SSL\u read:SSL\u error\u SYS\u调用。 根据SSL文档,这就是它的含义:,c++,networking,ssl,openssl,C++,Networking,Ssl,Openssl,发生了一些I/O错误。OpenSSL错误队列可能包含有关错误的更多信息。如果错误队列为空(即ERR_get_error()返回0),则可以使用ret了解有关错误的更多信息:如果ret==0,则观察到违反协议的EOF。如果ret==-1,则底层BIO报告I/O错误(对于Unix系统上的套接字I/O,请参阅errno以了解详细信息) 在我的例子中,ERR\u get\u error()返回0,ret==0。这意味着“ 观察到违反协议的EOF 你知道这意味着什么吗?我不明白。为了解决这个问题,我需要检

发生了一些I/O错误。OpenSSL错误队列可能包含有关错误的更多信息。如果错误队列为空(即ERR_get_error()返回0),则可以使用ret了解有关错误的更多信息:如果ret==0,则观察到违反协议的EOF。如果ret==-1,则底层BIO报告I/O错误(对于Unix系统上的套接字I/O,请参阅errno以了解详细信息)

在我的例子中,ERR\u get\u error()返回0,ret==0。这意味着“

观察到违反协议的EOF

你知道这意味着什么吗?我不明白。为了解决这个问题,我需要检查或做什么


感谢

这意味着您连接到了一个端部不使用SSL的对等套接字。仅仅
连接()
套接字并立即开始调用
SSL\u read()
是不够的。您必须在
connect()
之后调用
SSL\u connect()
以执行SSL握手,然后才能使用
SSL\u read()
SSL\u write()
。此外,请确保您连接到正确的端口。有些服务器使用单独的端口进行SSL和非SSL连接。

Remy的回答是正确的,但让我澄清一下并扩展一下

SSL\u-do\u-handshake()
SSL\u-connect()
SSL\u-accept()
SSL\u-write()
SSL\u-read()
SSL\u-shutdown()
调用
SSL\u-get\u-error()后返回0
返回
SSL\u ERROR\u SYSCALL
,实际
errno
为0表示对等方关闭了TCP连接,例如通过调用
close()
而没有正确关闭SSL。
这是一种完全正常和常见的情况,但就TLS/SSL而言,这并不是一种优雅的断开连接。因此,违反SSL协议的是EOF。

通常,当从套接字读取时,如果返回值为零,则表示连接已被另一端关闭。请检查连接另一端发生的情况选项。如果对等机正常断开连接,OpenSSL将报告一个
SSL\u错误\u零\u返回
ERROR.-1。这意味着对等机意外断开连接,句号。这里没有证据表明这是一个纯文本对等机。