在我的c ++应用程序中,我在网络功能中使用open ssl。 我在成功连接到套接字后立即看到,我在使用SSL_read的接收函数中遇到错误:SSL_ERROR_SYS_CALL。 符合SSL文档的含义:
发生了一些I / O错误。 OpenSSL错误队列可能包含有关错误的更多信息。如果错误队列为空(即ERR_get_error()返回0),则可以使用ret查找有关错误的更多信息:如果ret == 0,则观察到违反协议的EOF。如果ret == -1,则底层BIO报告了I / O错误(对于Unix系统上的套接字I / O,请参阅errno以获取详细信息)。
在我的情况下,ERR_get_error()返回0并且ret == 0.这意味着“
观察到违反协议的EOF。你知道这意味着什么?我不明白。我需要检查或做什么来解决这个问题?
感谢
答案 0 :(得分:0)
雷米的回答是正确的,但让我澄清并扩展一下。
_context.SalesOrders.AddRange(salesOrders);
_context.SalesOrderDetails.AddRange(salesOrders[0].OrderDetails);
_context.SalesOrderDetails.AddRange(salesOrders[1].OrderDetails);
_context.SaveChanges();
,SSL_do_handshake()
,SSL_connect()
,SSL_accept()
,SSL_write()
或SSL_read()
在调用{{1}后返回0时的情况返回SSL_shutdown()
,实际SSL_get_error()
为0表示对等关闭TCP连接,例如通过在没有正确SSL关闭的情况下调用SSL_ERROR_SYSCALL
。
这是一种完全正常和常见的情况,但就TLS / SSL而言,它并不是一种优雅的断开连接。因此,EOF违反了SSL协议。
答案 1 :(得分:-1)
这意味着您已连接到未在其末端使用SSL的对等套接字。仅connect()
套接字并立即开始调用SSL_read()
是不够的。您必须在SSL_connect()
之后致电connect()
以执行SSL握手,然后才能使用SSL_read()
和SSL_write()
。此外,请确保连接到正确的端口。某些服务器使用单独的端口进行SSL和非SSL连接。