繁体   English   中英

SSL_Read / SSL_Write中的重新协商应该调用什么

[英]What should be called for re-negotiation in SSL_Read/SSL_Write

我正在尝试将OpenSSL添加到epoll,并且套接字处于非阻止模式。 困惑我的一个问题是: SSL_read可能产生SSL_ERROR_WANT_WRITESSL_write可能产生SSL_ERROR_WANT_READ因为SSL重新协商。

因此,我的问题是:

  1. 如果SSL_read产生SSL_ERROR_WANT_WRITE ,我将套接字事件修改为EPOLLOUT 然后,当套接字以后可写时,我应该调用SSL_readSSL_write吗? (API文档说必须重复相同的操作)

  2. 与问题(1)相似,情况是SSL_write产生SSL_ERROR_WANT_READ

  3. 如果SSL_read产生SSL_ERROR_WANT_WRITE ,我可以调用SSL_send下一步发送数据吗? (TCP是全双工的,但是似乎OpenSSL无法独立读取和写入...)

  4. 与问题(3)相似,情况是SSL_write产生SSL_ERROR_WANT_READ

非常感谢!

您应该重新启动您尝试的API。

因此,如果SSL_read发出WANT_WRITE ,则在套接字准备好写入时再次调用SSL_read 对于SSL_write同样。

OpenSSL文档仅声明您需要使用给出阻止通知时所提供的相同参数来重复调用。

警告

当由于SSL_ERROR_WANT_READ或SSL_ERROR_WANT_WRITE而必须重复SSL_read()操作时,必须使用相同的参数来重复该操作。

即使您要进行全双工操作,如果当前操作在等待状态之前被阻塞,则应将所有新操作排队,直到阻塞操作完成。 这样,您将避免使用与触发阻止通知的操作不同的操作进入SSL堆栈的潜在问题。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM