为什么我在尝试SSL_write时遇到"错误:1409F07F:SSL例程:SSL3_WRITE_PENDING:写入重试错误"错误?

Ami*_*ens 14 openssl

尝试SSL_write时是否收到以下错误:

错误:1409F07F:SSL例程:SSL3_WRITE_PENDING:错误的写入重试

Ami*_*ens 22

原因很简单:当SSL_Write返回SSL_ERROR_WANT_WRITE或SSL_ERROR_WANT_READ时,您必须在条件满足后再次使用EXACT相同参数重复调用SSL_write(在套接字上可读/写).

使用不同的参数调用它将产生1409F07F错误的写入重试错误.

例如,当使用ptr = 0xABCDEFGH,size = 4096的SSL_write(ssl,ptr,size)使用SSL_ERROR_WANT_READ或SSL_ERROR_WANT_WRITE失败时,在重试SSL_write调用时,参数ptr和size应该相同.如果ptr是指向与原始调用中相同内容的副本的另一个指针,则它不等效.

但是,可以通过设置SSL_MODE_ENABLE_PARTIAL_WRITE和/或SSL_MODE_ACCEPT_MOVING_WRITE_BUFFER来更改SSL_write的默认行为.


感谢@ShriramV的澄清评论,并将其整合到答案中

  • 在重试SSL_write时,参数应完全相同 - 字面意思.例如,当使用ptr = 0xABCDEFGH,size = 4096的SSL_write(ssl,ptr,size)使用SSL_ERROR_WANT_READ或SSL_ERROR_WANT_WRITE失败时,在重试SSL_write调用时,参数ptr和size应该相同.如果ptr是指向与原始调用中相同内容的副本的另一个指针,则它不等效.但是,可以通过设置SSL_MODE_ENABLE_PARTIAL_WRITE和/或SSL_MODE_ACCEPT_MOVING_WRITE_BUFFER来更改SSL_write的默认行为. (10认同)
  • 能否请您将ellbaorate 10倍 (2认同)