libcurl 中 curl_multi 的演进:从双路并进到 epoll 革命
被忽视的技术转折点:7.38.0 的 poll/select 双模式
在 libcurl 的发展史上,2014年发布的 7.38.0 版本隐藏着一个关键转折点——它首次实现了 poll()
与 select()
的双模式支持,这一设计被长期误解为仅支持 select。让我们通过源码考古揭开真相:
c
/* lib/select.c (7.38.0) */ #ifdef HAVE_POLL_FINEr = poll(ufds, nfds, pending_ms); // 直接调用poll #elser = select(maxfd+1, ...); // select回退路径 #endif
历史性突破:
-
当系统支持
poll()
时(定义HAVE_POLL_FINE
),直接使用原生 poll 系统调用 -
否则自动回退到 select 模拟实现
-
完美解决 FD_SETSIZE(1024) 限制问题
误解澄清:早期文献错误描述 7.38.0 仅支持 select,实际它已实现智能双路选择