[英]What should be called for re-negotiation in SSL_Read/SSL_Write
我正在尝试将OpenSSL添加到epoll,并且套接字处于非阻止模式。 困惑我的一个问题是: SSL_read
可能产生SSL_ERROR_WANT_WRITE
和SSL_write
可能产生SSL_ERROR_WANT_READ
因为SSL重新协商。
因此,我的问题是:
如果SSL_read产生SSL_ERROR_WANT_WRITE
,我将套接字事件修改为EPOLLOUT
。 然后,当套接字以后可写时,我应该调用SSL_read
或SSL_write
吗? (API文档说必须重复相同的操作)
与问题(1)相似,情况是SSL_write
产生SSL_ERROR_WANT_READ
。
如果SSL_read
产生SSL_ERROR_WANT_WRITE
,我可以调用SSL_send
下一步发送数据吗? (TCP是全双工的,但是似乎OpenSSL无法独立读取和写入...)
与问题(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.