<<一种 Windows IOCP 整合 OpenSSL 实现方案>>
by 阙荣文 Que's C++ Studio
2021-06-06
TedQue/IOCP_SSL_Demo: IOCP integrate with OpenSSL (github.com)
1. IOCP 和 epoll 编程模型比较
本来程序员们都已经习惯了传统的 select 模型(包括 linux epoll 和 BSD kqueue),非常好理解. 但 Windows IOCP API接口另搞了一套,显得相当异类.
我个人还是更喜欢传统的 select 模型,而且我认为所谓的重叠操作没什么意义,为什么需要同时投递多个同类请求呢?比如发送一个大文件时,我们不可能放任程序一直投递写请求而使内存用量失控.
基于上述原因,也为了跨平台使用方便,最终把 IOCP 封装为 epoll 风格的接口,程序结构大致如下,是最常见的事件循环:
for (;;)
{
// 等待网络事件
selector->wait(&socket, &ev);
// 分类处理活跃的网络事件
if (TEST_BIT(ev, IO_EVENT_SEND))
{
}
else if (TEST_BIT(ev, IO_EVENT_RECV))
{
}
else
{