try*_*ter 0 c c++ sockets ssl openssl
我想检查 ssl_write 函数是否能够正确传输数据。
即使没有互联网连接,ssl_write 函数也会返回正值。
我想做这样的事情。
if (SSL_write(ssl, chars, strlen(chars)) <= 0)
{
Init();
}
else
{
....
}
Run Code Online (Sandbox Code Playgroud)
即使没有互联网连接,它如何仍然返回正值?
SSL_write 仅在send内部使用套接字函数,如果返回成功,则 SSL_write 也将返回成功。send只会将数据放入套接字的发送缓冲区并返回成功,如果这有效,即如果套接字缓冲区中有足够的空间并且底层 TCP 连接是否仍然建立。然后内核将尝试将数据传递给对等方。因此,如果数据实际上是在线路上传输到对等方或什至被对等方接收,则既不提供send也不SSL_write提供任何信息。
TCP 可以应对物理连接的临时中断。它只会尝试重新传输数据包。只有当这些重传经常失败(即对等方没有返回 ACK)时,TCP 连接(以及套接字)才会被认为是断开的。并且只有那个时候send才会失败,这也意味着只有那个时候SSL_write才会失败。