首页
学习
活动
专区
工具
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.3K30

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的这个超时时间,用于指导真正调用接口时,设置真正实现者的超时时间。

2.8K51

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

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

80830

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

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

1.2K30

☀️全网唯一万字长文讲解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、内容播放 允许浏览器永远永远地抹去不灭的内容

65840

终极指南:提高Nginx服务器硬度的12个技巧

也许你听过以上关于Nginx的美妙的事情,您可能已经很喜欢它了,正在考虑如何提高Nginx服务器的安全性,稳定性,那么本篇文章非常适合您继续看下去。...crawler 1; ~*bandit 1; } 然后将如下语句放入配置文件的server模块内: include /etc/nginx/blockuseragents.rules; 并加入if语句设置阻止后进入的页面...在配置文件中的server模块加入如下方法可以阻止一些欺骗攻击 if ($request_method !...~ ^(GET|HEAD|POST)$) { return 444; } 6: 设置缓冲区容量上限 这样的设置可以阻止缓冲区溢出攻击(同样是Server模块) client_body_buffer_size...例如: limit_conn_zone $binary_remote_addr zone=addr:5m; limit_conn addr 1; 8: 设置日志监控 上面的截图中已经有了,如何设置nginx

37630
领券