![](https://img-blog.csdnimg.cn/20201014180756930.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
libevent解析
文章平均质量分 57
本专栏是对开源网络库libevent的解析
cpp加油站
公众号:cpp加油站,专注分享linux下cpp知识
展开
-
libevent简单服务端和客户端实现
1.生成动态库说明在开始使用之前,我们需要先搞清楚libevent编译生成的各个动态库的作用。在下载libevent源码包进行编译以后,当前目录生成.libs目录,该目录下是所有的目标文件,这里我们只说明个动态库so文件的作用,通过makefile我们可以知道各个动态库包含内容:动态库名称作用libevent_core.so这个库包含了所有核心的事件和缓存功能libevent_extra.so这个库包含外围的dns、rpc、http等协议使用libevent.so原创 2021-05-06 11:36:17 · 540 阅读 · 0 评论 -
libevent定时器是怎么实现的
1. 定时器是怎么实现的在之前的文章里我们讲过,libevent最后处理都是在event_base_loop调用了相应的dispatch函数,定时器也是在dispatch函数中处理的。还是以epoll为例,在epoll_dispatch函数有以下一段代码: if (tv != NULL) { timeout = evutil_tv_to_msec_(tv); if (timeout < 0 || timeout > MAX_EPOLL_TIMEOUT_MSEC) { /* L原创 2021-05-06 11:35:34 · 464 阅读 · 0 评论 -
libevent绑定、监听和读写数据
1. 绑定和监听在上一篇文章中,以epoll为例说到了事件机制,会按顺序调用init和dispatch这两个回调函数,但是,我们回忆一下网络编程的过程,首先是需要创建socket、绑定socket、监听socket的,但目前为止还并没有涉及到,再去看源代码,会发现里面有listener.c,这个文件里面就会去做创建socket的过程。看evconnlistener_new_bind函数,如下:struct evconnlistener *evconnlistener_new_bind(struct原创 2021-05-06 11:34:51 · 591 阅读 · 0 评论 -
libevent的事件机制
1. 事件初始化从上一篇文章《libevent是怎么选择底层实现的》可以看出来,调用event_base_new()函数就是初始化好底层实现,给event_base结构体中evsel赋值,evsel是一个eventop结构体,我们再来看下:struct eventop { /** The name of this backend. */ const char *name; /** Function to set up an event_base to use this backend. It sh原创 2021-05-06 11:32:49 · 209 阅读 · 0 评论 -
libevent是怎么选择底层实现的
1. libevent到底使用哪种io模式来作为底层实现libevent实际封装了很多IO复用模式,比如evport,select,poll,epoll,devpoll等等,这些都是不同操作系统下的I/O多路复用模式,那么我们怎么知道当前使用的是哪种模式呢?说到底层实现,那就不得不说说event-config.h文件的生成。1.1 event-config.h文件的生成在上一篇《libevent目录结构分析》中,我们提到event-config.h,它存放了很多宏定义配置。event-config原创 2021-05-06 11:31:21 · 130 阅读 · 0 评论 -
libevent源代码初识及目录结构分析
1.libevent源代码获取最新代码直接从libevent的github即可,链接如下:https://github.com/libevent/libevent编译方法在该github介绍页说的很详细了,这里不再多说。2.libevent源代码的目录结构我们下载下来源代码以后,看到有很多文件,很多目录,往往不知道从何入手,我一开始也是这样,后来我花时间把每个目录和一些主要的文件内容弄明...原创 2019-07-26 18:09:39 · 328 阅读 · 0 评论