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_FINE
    r = poll(ufds, nfds, pending_ms);  // 直接调用poll
#else
    r = select(maxfd+1, ...);          // select回退路径
#endif

历史性突破

  • 当系统支持 poll() 时(定义 HAVE_POLL_FINE),直接使用原生 poll 系统调用

  • 否则自动回退到 select 模拟实现

  • 完美解决 FD_SETSIZE(1024) 限制障碍

误解澄清:早期文献错误描述 7.38.0 仅支持 select,实际它已实现智能双路选择


7.64.0 的精细化改造(2019年)

posted @ 2025-08-17 14:59  yjbjingcha  阅读(16)  评论(0)    收藏  举报