首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >SSL_connect成功但返回-1

SSL_connect成功但返回-1
EN

Stack Overflow用户
提问于 2018-04-20 10:05:37
回答 1查看 184关注 0票数 0

我试图在TLSv1.2上进行https连接。上下文创建和所有内容都很好,我在下面的代码中没有包含这些内容。

代码语言:javascript
复制
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();
   }
}

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

返回SSL连接失败-1。 SSL连接失败。

我查过数据包文件了。立即(在200微秒内)在发送客户机hello后,它将发送到if块5并发送FIN请求,这使我担心如果没有服务器的响应,我无法找到错误,SSL_connect将返回错误。

我评论了如果第5块和测试。令我惊讶的是,由于未调用关机,SSL握手正在发生,而通过TLSv1.2进行的数据传输将持续到最后。这意味着SSL_connect实际上是成功的,但不知怎么的,它正在发生异步。但是以这种方式,我不能报告实际上是否存在SSL握手中的一些错误。

有人能帮我做这件事吗?

它是否真的在异步地进行握手?如果是的话,它为什么会马上返回-1。它不应该等到握手完成后再放-1吗?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2018-04-20 10:59:21

正如您所提到的,您有非阻塞套接字。在这种情况下,如果SSL_connect() returns -1需要调用SSL_get_error(),检查它返回的是什么SSL_ERROR_WANT_READSSL_ERROR_WANT_WRITE,然后在检查底层套接字是否准备好使用select()进行读/写之后再次调用SSL_connect()

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/49939135

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档