gpt4 book ai didi

c - SSL_Read/SSL_Write 中应该调用什么来重新协商

转载 作者:行者123 更新时间:2023-11-30 15:08:07 24 4
gpt4 key购买 nike

我正在尝试将 OpenSSL 添加到 epoll 中,并且套接字处于非阻塞模式。令我困惑的一个问题是:由于 SSL 重新协商,SSL_read 可能会产生 SSL_ERROR_WANT_WRITE ,而 SSL_write 可能会产生 SSL_ERROR_WANT_READ

所以,我的问题是:

  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_readSSL_write 也是如此。

OpenSSL documentation仅表明您需要使用发出阻塞通知时给出的相同参数重复调用。

WARNING

When an SSL_read() operation has to be repeated because of SSL_ERROR_WANT_READ or SSL_ERROR_WANT_WRITE, it must be repeated with the same arguments.

即使您想要全双工操作,如果当前操作被阻止等待状态,那么您应该将所有新操作排队,直到被阻止的操作完成。这样,您就可以避免使用与触发阻止通知的操作不同的操作进入 SSL 堆栈时出现潜在问题。

关于c - SSL_Read/SSL_Write 中应该调用什么来重新协商,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37629139/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com