首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

openssl ssl_connect永远阻止 - 如何设置超时?

这个问题是关于OpenSSL库中的ssl_connect函数,该函数在TLS/SSL握手过程中阻塞了程序。用户希望了解如何设置超时来避免程序长时间阻塞。

首先,我们需要了解ssl_connect函数的基本用法。ssl_connect函数用于建立TLS/SSL连接。它接受一个SSL对象作为参数,并在连接建立成功后返回1。如果连接建立失败,它将返回一个负数。

要设置超时,我们可以使用select函数来监控文件描述符的状态。我们可以将超时设置为一个特定的时间,例如10秒。在超时时间内,如果文件描述符变为可写,则表示连接已经建立。如果超时时间内文件描述符未变为可写,则表示连接建立失败。

以下是一个示例代码,展示了如何使用select函数设置超时:

代码语言:c
复制
#include <sys/time.h>
#include <sys/types.h>
#include <unistd.h>
#include<openssl/ssl.h>

int ssl_connect_with_timeout(SSL *ssl, int timeout_seconds) {
    fd_set readfds, writefds;
    struct timeval timeout;
    int ret;

    FD_ZERO(&readfds);
    FD_ZERO(&writefds);
    FD_SET(SSL_get_fd(ssl), &readfds);
    FD_SET(SSL_get_fd(ssl), &writefds);

    timeout.tv_sec = timeout_seconds;
    timeout.tv_usec = 0;

    ret = select(SSL_get_fd(ssl) + 1, &readfds, &writefds, NULL, &timeout);
    if (ret == 0) {
        // 超时
        return -1;
    } else if (ret < 0) {
        // 错误
        return -2;
    }

    // 连接建立
    return ssl_connect(ssl);
}

在这个示例代码中,我们使用select函数监控文件描述符,并设置超时时间为10秒。如果超时时间内文件描述符未变为可写,则返回-1表示超时。如果连接建立成功,则返回1。

请注意,这个示例代码仅用于演示目的,实际应用中可能需要根据具体情况进行调整。

总之,要设置超时,我们可以使用select函数监控文件描述符的状态,并在超时时间内检查文件描述符是否变为可写。如果文件描述符未变为可写,则表示连接建立失败。

页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

  • 服务超时、重试次数、熔断如何设置

    文章目录 一、超时时间 为什么要设置超时时间? 超时时间怎么设置? 二、重试次数怎么设置? 三、熔断 工作流程 一、超时时间 为什么要设置超时时间?...针对服务调用都要设置一个超时时间,以避免依赖的服务迟迟没有返回调用结果,把服务消费者拖死。 超时时间怎么设置?...方案二:按照接口重要性来进行设置,并发低的接口设置超时时间可以多点,比如2s,并发高的接口设置超时时间可以设置的低点,比如200ms。 二、重试次数怎么设置?...**通用方案:**重试次数设置为 1。...三、熔断 可以配合Hystrix熔断,假如服务提供者出现故障,短时间内无法恢复时,无论是超时重试还是双发不但不能提高服务调用的成功率,反而会因为重试给服务提供者带来更大的压力,从而加剧故障。

    1.7K10

    0900-7.1.7-如何设置Hive任务的超时时间

    本文主要讲述如何设置Hive 任务的超时时间以及与其关联的参数,合理的配置参数可以减少上述问题的发生。...可以通过设置为0或负值来禁用。例如,值86400000 表示会话将在 1 天不活动后超时。...• hive.server2.session.check.interval • 会话/操作超时的检查间隔(以毫秒为单位),可以通过设置为0或负值来禁用,在CDP中默认为15分钟。...例如,-7200000 的值表示正在运行的查询/操作如果仍在运行,将在 2 小时后超时。 以下用例结合了上述示例中的三个设置值: 1....,可以及时的将存在问题的Hive SQL 进行超时处理,当然在设置参数时也需要考虑正常作业运行的时间,以及可能出现的因资源不够的待定时间。

    4.8K30

    Spring Cloud组件那么多超时设置如何理解和运用?

    而作为服务调用环节涉及到的几个组件:Feign、Hystrix,Ribbon、OkHttp 都有超时时间的设置,Spring Cloud 是如何优雅地把它们协调好呢?本文将为你揭晓答案。 1....关于HttpClient的其中一个实现OkHttp的工作原理,请参考Spring Cloud OkHttp设计原理 ---- 2.每个组件阶段的超时设置 如上一章节展示的调用关系,每个组件自己有独立的接口调用超时设置参数...---- 2.2 Hystrix的超时设置 Hystrix的超时设置,在于命令执行的时间,一般而言,这个时间要稍微比Feign的超时时间稍微长些,因为Command除了请求调用之外,还有一些业务代码消耗...Hystrix的超时时间是站在命令执行时间来看的,和Feign设置超时时间在设置上并没有关联关系。...由上面的原则可以看出,当feign设置超时时间,Ribbon会依据feign的设置同步。Ribbon的这个超时时间,用于指导真正调用接口时,设置真正实现者的超时时间。

    3K51

    Java避坑指南:多线程批量调用下游接口,如何正确设置超时时间

    多线程批量调用下游接口,设置超时时间是一种常见的需求,特别是在需要保证程序在预定时间内必须返回,否则超时设置不合理,导致接口变慢。...设置场景:多线程批量执行三个接口,耗时分别为10s、15s、20s(一般不会设置这么大的超时时间,此值为了模拟),总超时时间为15s。...上述错误做法:线程池提交任务后,每个任务的超时时间都设置为一个固定值,从而总任务超时超时延长。...java.util.concurrent.Future#get(long, java.util.concurrent.TimeUnit)方法是对每个任务的超时时间设置,而不是对总任务设置超时时间。...线程池invokeAll的原理其实是动态改动了java.util.concurrent.Future#get(long, java.util.concurrent.TimeUnit)设置超时时间,每次都会设置

    24110

    Feign如何设置超时时间,不同情况下还真不一样

    大家好,我是三友~~ 今天来聊一聊前段时间看到的一个面试题,也是在实际项目中需要考虑的一个问题,Feign的超时时间如何设置?...Feign的超时时间设置方式并不固定,它取决于Feign在项目中是如何使用的,不同的使用方式,超时时间设置方式也不大相同,甚至还可能有坑。...Options 如果你不设置,那么超时时间就是默认的 默认的就是连接超时10s,读超时60s 所以可以通过设置Feign.Builder中的options来设置超时时间 来个demo 环境准备,就是一个简单的...换句话说,一旦你通过上面说的那些配置方式设置Feign的超时时间,就不是默认了 此时通过Ribbon设置超时时间就不会生效了 Feign是如何在默认情况下将超时时间交给Ribbon管理的?...而方法参数是不可能设置的成DEFAULT_OPTIONS 因为这是我们控制的,只要我们参数不传DEFAULT_OPTIONS,那么永远都不可能是DEFAULT_OPTIONS。

    1.6K30

    看腾讯专家如何在高并发压测中支持https

    可以看到,就是在普通的socket建立好tcp连接后,再用SSL_connect建立ssl层的连接。...所以,这里的要点是,OpenSSL的建立连接、收包、发包,都可以是非阻塞的。 建立连接不用上图中的SSL_connect,而用SSL_do_handshake。...这样,如果socket本身设置为非阻塞的,那这个操作也就不会阻塞,而是有三种返回可能: ? 1)返回0: 意味着ssl层的交互阻塞了。...5  HTTPS测试功能的使用 下面,我们来看一下如何在简单模式中进行https页面的服务器性能测试。...输入合适的测试标题和测试设置 (此图为动图,横屏观看效果更佳) 2)新建一个客户端请求,接口压测包括读写接口,读接口基本是GET请求,写接口基本是POST请求。

    1.3K30

    ☀️全网唯一万字长文讲解Nginx安装运营维护☀️《❤️记得收藏❤️》

    # 为了让编译器找到这个软件,你可能需要设置: # LDFLAGS: -L/usr/local/opt/openssl/lib # CPPFLAGS: -I/usr/local/opt/openssl/...OpenSSL 库源的路径| | –with-openssl-opt=OPTIONS | 为 OpenSSL 构建设置附加选项| | --with-debug | 启用调试日志| | --add-module...(超时接收) proxy_buffer_size 4k; #设置代理服务器(nginx)保存用户头信息的大小 proxy_buffers 4 32k;#proxy_buffers...(超时接收) proxy_buffer_size 4k; #设置代理服务器(nginx)保存用户头信息的大小 proxy_buffers 32k;#4,网页平均在32k以下的话...example.org/new-site/$1 永久; } `` ## 8、性能 ### 8.1、内容播放 允许浏览器永远永远地抹去不灭的内容

    69440
    领券