gpt4 book ai didi

c - SSL_connect 成功但返回 -1

转载 作者:太空宇宙 更新时间:2023-11-04 06:51:59 24 4
gpt4 key购买 nike

我正在尝试通过 TLSv1.2 建立 https 连接。上下文创建和一切都很好,我没有包含在下面的代码中。

if(https)    //block 1
{
int ssl_err = 0;
int ssl_rc = 0;
ssl_fd = SSL_new(ctx); /* create new SSL connection state */
if(ssl_fd) //block 2
{
printf("Failure in SSL state creation.");
ssl_err = -1;
}
if(ssl_err == 0) //block 3
{
SSL_set_fd(ssl_fd, fd); /* attach the socket descriptor */
ERR_clear_error();
ssl_rc = SSL_connect(ssl_fd); /* perform the connection*/
printf("Failure in SSL connection %d returned.\n", ssl_rc);
if ( ssl_rc == -1 ) //block 4
ssl_err = -1;
}
if ( ssl_err == -1 ) //block 5
{
printf("Failure in SSL connection.\n");
SSL_free(ssl_fd);
shutdown(fd, 2);
abort();
}
}

在上面的代码中,输出显示为

Failure in SSL connection -1 returned.
Failure in SSL connection.

我已经检查了数据包文件。在发送客户端问候后立即(在 200 微秒内),它将转到 if block 5 并发送 FIN 请求,这让我担心找不到错误,因为没有服务器的响应,SSL_connect 返回错误。

我评论了 block 5 并进行了测试。令我惊讶的是,由于没有调用关闭,SSL 握手正在进行并且通过 TLSv1.2 的数据传输一直持续到最后。这意味着 SSL_connect 实际上是成功的,但不知何故它是异步发生的。但这样一来,我无法报告 SSL 握手是否确实存在错误。

谁能帮我解决这个问题?
它是否真的在异步进行握手?如果是,为什么它立即返回 -1。难道不应该等握手完成后再放-1吗?

最佳答案

正如您所提到的,您拥有非阻塞套接字。在这种情况下,如果 SSL_connect() 返回 -1,您需要调用 SSL_get_error(),检查它返回的内容 SSL_ERROR_WANT_READSSL_ERROR_WANT_WRITE,然后在使用 select()

检查底层套接字准备好读/写后再次调用 SSL_connect()

关于c - SSL_connect 成功但返回 -1,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49939135/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com