序
很久没有更新这个blog了,原因有多个,期间也换了多个blog平台,最后还是回到了csdn的怀抱中,算是一个轮回吧。作为久别重逢的开篇之作,本文是对最近一段时间,使用 openssl 的一个坑点总结。
在项目中需要访问 https 加密的网页,为了保证并发性,需要用到非阻塞的 socket,搜索发现,这种使用场景的相关介绍不是很多,所以这里记录一下使用的过程。
在项目中,所使用的 ssl 库是老牌 sll 库 —— openssl。所使用的 io多路复用 技术是 epoll。
核心流程
整体流程与访问非加密网站类似,不同之处在于有一下几点:
- 在 socket 建立 tcp 连接之后,需要绑定 socket 句柄在 SSL 中
- 读取,发送数据,使用 SSL 库的方法,替代 linux 系统调用
- 关闭连接前,需要先执行 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 的管理