打开下载好的 l i b e v e n t libevent libevent源文件夹,会发现其所有的源文件都在此目录下;代码分类大致分为头文件、内部使用的头文件、辅助功能函数、日志、 l i b e v e n t libevent libevent 框架、对系统 I / O I/O I/O 多路复用机制的封装、信号管理、定时事件管理、缓冲区管理、基本数据结构和基于 l i b e v e n t libevent libevent 的两个实用库等几个部分。
(1)头文件:
主要是
e
v
e
n
t
2
/
e
v
e
n
t
.
h
event2/event.h
event2/event.h:事件宏定义、接口函数声明,主要结构体
e
v
e
n
t
event
event的声明;
e
v
e
n
t
2
/
t
h
r
e
a
d
.
h
event2/thread.h
event2/thread.h:应用于多线程程序
e
v
e
n
t
2
/
b
u
f
f
e
r
.
h
event2/buffer.h
event2/buffer.h和
e
v
e
n
t
2
/
b
u
f
f
e
r
e
v
e
n
t
.
h
event2/bufferevent.h
event2/bufferevent.h:读写的缓冲区管理
e
v
e
n
t
2
/
u
t
i
l
.
h
event2/util.h
event2/util.h:用于可移植的非阻塞代码的使用程序功能
e
v
e
n
t
2
/
d
n
s
.
h
event2/dns.h
event2/dns.h:异步dns解析
e
v
e
n
t
2
/
h
t
t
p
.
h
event2/http.h
event2/http.h:基于libevent的http服务器
e
v
e
n
t
2
/
r
p
c
.
h
event2/rpc.h
event2/rpc.h:用于创建RPC服务器和客户端的框架
(2)内部头文件:
x
x
x
−
i
n
t
e
r
n
a
l
.
h
xxx-internal.h
xxx−internal.h:内部数据结构和函数,对外不可见,以达到信息隐藏的目的
(3)
L
i
b
e
v
e
n
t
Libevent
Libevent框架:
e
v
e
n
t
.
c
:
e
v
e
n
t
event.c:event
event.c:event整体框架的代码实现
(4)对系统
I
/
o
I/o
I/o多路复用机制的封装:
e
p
o
l
l
.
c
epoll.c
epoll.c:对
e
p
o
l
l
epoll
epoll的封装
s
e
l
e
c
t
.
c
select.c
select.c:对
s
e
l
e
c
t
select
select的封装
p
o
l
l
.
c
poll.c
poll.c:对
p
o
l
l
poll
poll的封装
d
e
v
p
o
l
l
.
c
devpoll.c
devpoll.c:对
d
e
v
/
p
o
l
l
dev/poll
dev/poll的封装
k
q
u
e
u
e
.
c
kqueue.c
kqueue.c:对
k
q
u
e
u
e
kqueue
kqueue的封装
(5)定时事件管理:
m
i
n
h
e
a
p
−
i
n
t
e
r
n
a
l
.
h
minheap-internal.h
minheap−internal.h:是一个以时间作为
k
e
y
key
key的小根堆结构
(6)信号管理:
s
i
n
g
a
l
.
c
singal.c
singal.c:对信号事件的处理
(7)辅助功能函数:
e
v
u
t
i
l
.
h
evutil.h
evutil.h 和
e
v
u
t
i
l
.
c
evutil.c
evutil.c:一些辅助功能函数,包括创建
s
o
c
k
e
t
socket
socket
p
a
i
r
pair
pair 和一些时间操作函数:加、减
(8)日志:
l
o
g
−
i
n
t
e
r
n
a
l
.
h
log-internal.h
log−internal.h和
l
o
g
.
c
log.c
log.c:
l
o
g
log
log日志函数
(9)缓冲区管理:
E
v
b
u
f
f
e
r
−
i
n
t
e
r
a
l
.
h
Evbuffer-interal.h
Evbuffer−interal.h和
b
u
f
f
e
r
.
c
buffer.c
buffer.c:
l
i
b
e
v
e
n
t
libevent
libevent对于缓冲区的封装
(10)基本数据结构:
c
o
m
p
a
t
/
s
y
s
compat/sys
compat/sys下的
q
u
e
u
e
.
h
queue.h
queue.h:
l
i
b
e
v
e
n
t
libevent
libevent 基本数据结构的实现,包括链表,双向链表,
队列等
t
i
m
e
.
h
time.h
time.h:一些用于时间操作的结构体定义、函数和宏定义
(11)实用网络库:
h
t
t
p
http
http 和
e
v
d
n
s
evdns
evdns:是基于
l
i
b
e
v
e
n
t
libevent
libevent 实现的
h
t
t
p
http
http 服务器和异步
d
n
s
dns
dns 查询库;