在尝试进行SSL_write时,为什么会出现“error:1409F07F:SSL routines:SSL3_WRITE_PENDING: bad write retry”错误?

18
当尝试进行SSL_write时,是否遇到了以下错误:
错误:1409F07F:SSL例程:SSL3_WRITE_PENDING:错误的写入重试。

嘿,你可以将问题与答案分开,这样如果你认为自己的答案是正确的,就可以接受自己的答案。谢谢你的提示。 - mati
谢谢你的建议,我按照你的建议做了,十分感谢! - Amit Bens
1个回答

26
原因很简单:当SSL_Write以SSL_ERROR_WANT_WRITE或SSL_ERROR_WANT_READ返回时,必须在条件满足(套接字上可读/可写)后再次使用完全相同的参数调用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的澄清评论,已整合到答案中。

2
你能否详细阐述一下,谢谢。 - codersofthedark
11
在重试 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 的默认行为。 - Shriram V
我遇到了相同的错误 :SSL routines:SSL3_WRITE_PENDING: bad write retry。我试图向大约15k个用户发送推送通知。我注意到它会在每个几百个用户处中断,但在出现该错误之前,会先显示 SSL: Broken pipe 的错误。每当出现断开连接的错误时,我通过重新连接来解决问题。然后继续发送。这很有效。只需不断重复此过程,直到向所有用户发送完毕。 - haxpor
在我的情况下,我需要重新初始化SSL连接,因此可能需要在每个方法调用中设置Laravel中的SSL连接。 - Kirtikumar A.
1
@ShriramV - 已点赞。你关于这两个标志的评论应该真正成为答案的一部分。 - CubicleSoft
显示剩余3条评论

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接