openssl 使用非阻塞 bio

本文介绍了在项目中使用openssl实现非阻塞IO访问HTTPS网页的经验,重点关注了建立连接、发送与读取数据以及关闭连接的流程。在连接过程中,通过epoll管理socket并进行非阻塞TCP连接,SSL握手可能需要多次调用。在读取数据时要注意避免只读取部分加密段,可能导致数据丢失。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

很久没有更新这个blog了,原因有多个,期间也换了多个blog平台,最后还是回到了csdn的怀抱中,算是一个轮回吧。作为久别重逢的开篇之作,本文是对最近一段时间,使用 openssl 的一个坑点总结。
在项目中需要访问 https 加密的网页,为了保证并发性,需要用到非阻塞的 socket,搜索发现,这种使用场景的相关介绍不是很多,所以这里记录一下使用的过程。
在项目中,所使用的 ssl 库是老牌 sll 库 —— openssl。所使用的 io多路复用 技术是 epoll。

核心流程

整体流程与访问非加密网站类似,不同之处在于有一下几点:

  1. 在 socket 建立 tcp 连接之后,需要绑定 socket 句柄在 SSL 中
  2. 读取,发送数据,使用 SSL 库的方法,替代 linux 系统调用
  3. 关闭连接前,需要先执行 SSL 关闭流程

建立连接

首先,打开 socket 句柄,然后设置必要的属性

int sock_fd = -1;
int flags = -1;
sock_fd = socket(AF_INET, SOCK_STREAM, 0);
flags = fcntl(sockfd, F_GETFL, 0);
fcntl(sockfd, F_SETFL, flags | O_NONBLOCK);

然后,将句柄加入 epoll 的管理

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值