第八章第三节 libevent源码组织结构
文章目录
- 头文件目录include/event2。该目录自Libevent朱版本升级之2.0之后引入;其中的头文件是提供给应用程序使用的。如event.h提供核心函数、http.h提供HTTP协议相关服务、rpc.h提供远程调用支持。
- 源码根目录下的头文件。这些头文件分为两类:一类是对include/event2目录下部分头文件的封装;一类供libevent内部使用,这类头文件都具有
*-internal.h
形式。
- 通用数据结构目录cpmpat/sys。该目录下仅有一个头文件queue.h。该文件封装了跨平台的基础数据结构:单向链表、双向链表、队列、尾队列、循环队列。
- sample目录。示例程序。
- test目录。测试程序。
- WIN32-Code目录。Windows平台上的专用代码。
- event.c。实现libevent的整体框架。主要是对event与event_base对象的相关操作。
- devpoll.c、kqueue.c、evport.c、select.c、win32select.c、poll.c与epoll.c。分别封装了/dev/poll、kqueue、event ports、POSIX select、Windows select、poll、epoll这些I/O复用机制。这些文件的主要内容相似,都是针对结构体eventop所定义的接口函数的实现。
- signal.c。提供对信号的支持。其内容也是针对eventop所定义的接口函数的具体实现。
- evmap.c。维护句柄与事件处理器之间的映射关系。
- event_tagging.c。提供向缓冲区添加标记数据以及从缓冲区中读取标记数据的函数。
- event_iocp.c。提供对Windows IOCP的支持。
buffer*.c
。提供对网络I/O缓冲的控制。包含输入输出数据过滤、传输速率限制、使用SSL协议、零拷贝文件传输。
evthread*.c
。提供对多线程的支持。
- listener.c文件。封装对监听socket的操作,包括监听连接与接收连接。
- logs.c文件。libevent的日志系统。
- evutil.c、evutil_rand.c、strlcpy.c与arc4random.c文件。提供一些基本操作,如生成随机数、获取socket地址信息、读取文件、设置socket属性等。
- evdns.c、http.c与evrpc.c。分别提供对DNS协议、HTTP协议、RPC协议的支持。