天天看点

libcurl实现解析(1) - 引言1.引言2.libcurl介绍3.方向

目录

1.引言

2.libcurl介绍

3.剖析方向

1.引言

在爱立信最近参与的项目是一个数据转发程序,基于http协议。主要使用到了epoll与libcurl这两种技术。

本人负责的是里边的传输模块,也是项目的最核心模块之一。刚好使用到了libcurl这个库,并且用它与epoll进行结合。所以基本上从开始的架构设计,到开发,到性能调试,bug fix,基本贯穿了整个项目开发周期。

限于开发进度要求,日常都是调用libcurl的API,有时碰到难题时,查一下官方的document,或者翻阅相关部分的源码。

但是,一直都没有好好看看它的内部整体的实现机制。现在项目结束了,可以静下心详细研究下它的内部实现。

2.libcurl介绍

libcurl是一个开源的客户端url传输库,支持众多的协议,包括DICT, FILE, FTP, FTPS, Gopher, HTTP, HTTPS, IMAP, IMAPS, LDAP, LDAPS, POP3, POP3S, RTMP, RTSP, SCP, SFTP, SMTP, SMTPS, Telnet and TFTP等。

libcurl支持SSL证书, HTTP POST, HTTP PUT,FTP上传,基于表单的HTTP上传、代理、HTTP/2、cookies、用户名+密码认证(Basic, Plain, Digest, NTLM等)、下载/上传文件的断点续传,http代理服务器管道等。

libcurl是高度可移植的,可以工作在不同的平台上,支持Windows,Unix,Linux等。

libcurl是免费的,线程安全的,IPV6兼容的,同时它还有很多其他非常丰富的特性。libcurl已经被很多知名的大企业以及应用程序所采用。

相关的文档以及源码可以参考官方链接:http://curl.haxx.se/libcurl/

3.方向

本系列的后续文章,主要会专注于下面所列的与libcurl相关的主题:

1).libcurl中对select()&poll()的使用方法。

2).libcurl中最重要的easy curl与multi curl的原理,架构,以及它们之间的交互机制。

3).探讨一些重要的回调函数的实现机制。例如:

easy curl中的

CURLOPT_WRITEFUNCTION,

CURLOPT_READFUNCTION,

CURLOPT_IOCTLFUNCTION,

CURLOPT_SEEKFUNCTION,

CURLOPT_SOCKOPTFUNCTION,

CURLOPT_OPENSOCKETFUNCTION,

CURLOPT_CLOSESOCKETFUNCTION,

CURLOPT_PROGRESSFUNCTION.

以及multi curl中的

CURLMOPT_SOCKETFUNCTION,

CURLMOPT_TIMERFUNCTION.

4).探讨一些重要的easy curl option以及multi curl option在底层socket上的实现方式。