一、引言
最近因为工作的原因,我接触到了 libcurl 库。这是一个非常强大的客户端网络库,使用它我们可以完成有关客户端 URL 请求的相关功能。
关于 libcurl 库的编译与使用,我已经在上一篇博客中有所总结,博客地址如下:
libcurl 探索之旅:libcurl 分别在 Unix 环境和 Windows 环境下的编译与使用
在成功编译了 libcurl 库并且成功运行了 libcurl 库源代码中的示例代码之后,我又回到了 libcurl 的官方网站,试图通过官方文档的介绍加上 libcurl 的示例代码进行更为深入的学习。
于是乎,这几天一直都在认真阅读 libcurl 的官方文档。libcurl 的官方文档的阅读当然不是一件简单的事情,其中也遗留了一些我百思不得其解的问题。而这篇博客讨论的主题,就是其中的一个,那就是:
在 libcurl 中的 Multi Interface 的模块中,有个名为 curl_multi_fdset 的函数,它的作用究竟是什么?
或许我直接提出来这个一个概念性的问题,实在有些突兀,不如这篇博客再实际一些,以 libcurl 的官方示例的第一个使用了该函数的例子 10-at-a-time.c 作为研究目标,让我们来仔细研究下,10-at-a-time.c 这份代码,究竟代码逻辑是什么,究竟 curl_multi_fdset 这个函数在这份代码中扮演了怎样的角色。
二、10-at-a-time.c 代码一览
脱离了代码讲述这个问题永远是无力的,这里我左思右想,还是觉得把全部代码粘贴出来比较好,尽管这会导致本篇博客感官上的不美观:
#include
#include
#include
#ifndef WIN32
# include
#endif
#include
static const char *urls[] = {
"http://www.microsoft.com",
"http://www.opensource.org",
"http://www.google.com",
"http://www.yahoo.com",
"http://www.ibm.com",
"http://www.mysql.com",
"http://www.oracle.com",
"http://www.ripe.net",
"http://www.iana.org",
"http://www.amazon.com",
"http://www.netcraft.com",
"http://www.heise.de",
"http://www.chip.de",
"http://www.ca.com",
"http://www.cnet.com",
"http://www.news.com",
"http://www.cnn.com",
"http://www.wikipedia.org",
"http://www.dell.com",
"http://www.hp.com",
"http://www.cert.org",
"http://www.mit.edu",
"http://www.nist.gov",
"http://www.ebay.com",
"http://www.playstation.com",
"http://www.uefa.com",
"http://www.ieee.org",
"http://www.apple.com",
"http://www.symantec.com",
"http://www.zdnet.com",
"http://www.fujitsu.com",
"http://www.supermicro.com",
"http://www.hotmail.com",
"http://www.ecma.com",
"http://www.bbc.co.uk",
"http://news.google.com",
"http://www.foxnews.com",
"http://www.msn.com",
"http://www.wired.com",
"http://www.sky.com",
"http://www.usatoday.com",
"http://www.cbs.com",
发表评论