【发布时间】:2021-10-29 21:27:15
【问题描述】:
我想检查 ssl_write 函数是否能够正确传输数据。
即使没有互联网连接,ssl_write 函数也会返回正值。
我想做这样的事情。
if (SSL_write(ssl, chars, strlen(chars)) <= 0)
{
Init();
}
else
{
....
}
即使没有互联网连接,它如何仍然返回正值?
【问题讨论】:
-
This answer 可能会提供您正在寻找的功能(通过 getsockopt() 检查套接字的状态)。
-
@Peter-ReinstateMonica:我怀疑这是否有帮助。如果套接字已经检测到错误,那么
send和SSL_write也会失败。 -
@SteffenUllrich 啊,我明白了。与不知道的仅侦听服务器相反?那个人不应该也收到信号吗?
-
@Peter-ReinstateMonica:我不太明白你最后的评论。也许我试图重申我的观点:套接字是否被认为工作。如果不是全部发送,SSL_write 和 getsockopt 将显示错误,但如果它被认为有效,则不会显示错误。包括暂时中断连接在内的一些数据包丢失不被视为错误,因为 TCP 被设计为对此具有鲁棒性。
-
@SteffenUllrich getsockopt() 的答案是关于服务器侦听的套接字,而不是尝试写入的 OP 用例。正如您所说,写入将在与 getsockopt() 指示错误的相同情况下失败;但是服务器需要主动执行其中一项以检测失败状态。 (这就是为什么链接的答案在服务器案例中很有帮助,但在这里没有任何好处,正如您所指出的那样。)然后我想知道当套接字“停止工作”时服务器是否不会收到信号。我猜不是。