【问题标题】:Why am I getting "error:1409F07F:SSL routines:SSL3_WRITE_PENDING: bad write retry" error while attempting an SSL_write?为什么我在尝试 SSL_write 时收到“错误:1409F07F:SSL 例程:SSL3_WRITE_PENDING:错误的写入重试”错误?
【发布时间】:2010-06-08 12:25:49
【问题描述】:

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

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

【问题讨论】:

  • 嘿,你可以把你的问题和你的答案分开,这样如果你认为它是正确的,你可以接受你自己的答案。感谢您的提示
  • 感谢您的想法,我按照您的建议做了,10 倍!

标签: openssl


【解决方案1】:

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

使用不同的参数调用它,会产生 1409F07F bad write retry 错误。

例如,当 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 澄清cmets,并集成到答案中

【讨论】:

  • 你能不能 ellbaorate 10x
  • @dragonsupercool 例如,如果您首先使用目标缓冲区 X 偏移 Y 和大小 Z 进行 SSL_write,则必须使用所有参数的相同值重新调用,因为写入操作将尝试从它的位置恢复离开(或类似的东西,这就是我的知识结束的地方;p)
  • @Amit -- 这没有任何意义。你是说如果你用 500 个字节的数据调用 SSL_write 并返回 100(说它只发送了 100 个字节),错误代码为 SSL_ERROR_WANT_READ,你必须用已经发送的 100 个字节以及剩余 400 字节?
  • 重试 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 的默认行为。
  • @ShriramV - 点赞。您对这两个标志的评论应该是答案的一部分。
猜你喜欢
  • 2013-01-19
  • 1970-01-01
  • 2015-11-27
  • 2021-07-27
  • 2021-06-21
  • 2013-05-25
  • 1970-01-01
  • 2020-10-10
  • 2022-01-26
相关资源
最近更新 更多