![](https://img-blog.csdnimg.cn/20201014180756930.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
libevent
守望178
这个作者很懒,什么都没留下…
展开
-
19、《Libevent中文帮助文档》学习笔记19:全文总结
libeventlibevent实际上就是对底层select/poll/epoll等进行了封装,每个event_base都有一种方法,该方法是select、poll、epoll、kqueue、devpoll、evport、win32。event_base使用libevent函数之前需要分配一个或多个event_base,每个event_base持有一个事件集合,可以检测以确定哪个事件是...原创 2019-09-26 15:02:55 · 220 阅读 · 0 评论 -
18、《Libevent中文帮助文档》学习笔记18:LibEvent编程示例
1 event客户端服务端示例客户端:#include <stdio.h>#include <stdlib.h>#include <unistd.h>#include <sys/types.h>#include <sys/socket.h>#include <netinet/in.h>#include ...原创 2019-09-26 14:16:49 · 209 阅读 · 0 评论 -
17、《Libevent中文帮助文档》学习笔记17:废弃的DNS接口
待补充。原创 2019-09-26 09:11:51 · 109 阅读 · 0 评论 -
16、《Libevent中文帮助文档》学习笔记16:DNS服务器接口
待补充。原创 2019-09-26 09:07:38 · 124 阅读 · 0 评论 -
15、《Libevent中文帮助文档》学习笔记15:底层DNS接口
待补充。原创 2019-09-26 09:07:01 · 96 阅读 · 0 评论 -
14、《Libevent中文帮助文档》学习笔记14:使用LibEvent的DNS:高和低层功能
待补充原创 2019-09-26 09:02:30 · 108 阅读 · 0 评论 -
13、《Libevent中文帮助文档》学习笔记13:Linux下集成、运行libevent
Linux下编译libevent的指导可以参考《4、《Libevent中文帮助文档》学习笔记4:Linux下编译libevent》,完成编译、安装,生成so库后,其他程序即可依赖libevent的so库,使用libevent的功能。由于没有通过prefix指定安装路径,因此库文件默认安装在/usr/local/lib下,头文件在/usr/local/include下,如下所示:如图...原创 2019-09-23 16:48:30 · 439 阅读 · 0 评论 -
13、《Libevent中文帮助文档》学习笔记13:接受一个TCP连接
待补充。原创 2019-09-26 08:57:39 · 99 阅读 · 0 评论 -
12、《Libevent中文帮助文档》学习笔记12:evbufferIO实用功能
LibEvent的bufferevent实现了向后添加数据和前面移除数据的优化字节序列。evbuffer用于处理完IO的缓冲部分。它不提供调度IO或当IO就绪时触发IO的功能:这就是bufferevent所做的事。除了特定说明外,本章的函数定义在<event2/buffer.h>中。1 创建或释放一个evbuffer接口struct evbuffer* evbuffer...原创 2019-09-21 17:59:34 · 150 阅读 · 0 评论 -
11、《Libevent中文帮助文档》学习笔记11:高级话题
本章描述bufferevent的一些对通常使用不必要的高级特征。如果只想学习如何使用bufferevent,可以跳过这一章,直接阅读下一章。待补充原创 2019-09-21 17:45:35 · 117 阅读 · 0 评论 -
10、《Libevent中文帮助文档》学习笔记10:Bufferevent概念和入门
很多时候,除了响应事件之外,应用还希望做一定的数据缓冲。比如说,写入数据的时候,通常的运行模式是:决定要向连接写入一些数据,把数据放入到缓冲区中; 等待连接可以写入; 写入尽量多的数据; 记住写入了多少数据,如果还有更多数据要写入,等待连接再次可以写入;这种缓冲IO模式很通用,libevent为此提供了一种通用机制,即bufferevent。bufferevent由一个底层的传输端口(...原创 2019-09-21 15:22:46 · 289 阅读 · 0 评论 -
9、《Libevent中文帮助文档》学习笔记9:辅助类型和函数
<event2/util.h>定义了很多在实现可移植应用时有用的函数,libevent内部也使用这些类型和函数。1 基本类型evutil_socket_t在除Windows之外的大多数地方,套接字是个整数,操作系统按照数值次序进行处理。然而,使用Windows套接字API时,socket具有类型SOCKET,它实际上是个类似指针的句柄,收到这个句柄的次序是未定义的。在Win...原创 2019-09-21 11:08:43 · 133 阅读 · 0 评论 -
8、《Libevent中文帮助文档》学习笔记8:处理事件
libevent的基本操作单元是事件,每个事件代表一组条件的集合,这些条件包括:文件描述符已经就绪,可以读取或者写入 文件描述符变为就绪状态,可以读取或者写入(仅对于边沿触发IO) 超时事件 发生某信号 用户触发事件所有事件具有相似的生命周期。调用libevent函数设置事件并且关联到event_base之后,事件进入"已初始化(initialized)"状态。此时可以将事件添加到e...原创 2019-09-20 17:18:58 · 192 阅读 · 0 评论 -
7、《Libevent中文帮助文档》学习笔记7:事件循环
1 运行循环有了event_base,并且有一些event注册到其中(关于怎样创建和注册event请参考下一章节),就需要等待这些event通知你他们发生了什么。接口#define EVLOOP_ONCE 0x01 #define EVLOOP_NONBLOCK 0x02 #define EVLOOP_NO_EXIT_ON_EMPTY 0x04 int event_base_...原创 2019-09-20 15:32:35 · 376 阅读 · 0 评论 -
6、《Libevent中文帮助文档》学习笔记6:创建event_base
在你能使用任何感兴趣的LibEvent函数之前,你需要分配一个或多个event_base结构体。每个event_base结构体拥有一系列的event,并且可以通过轮询判断哪个event是激活的。如果一个event_base设置为使用锁定,在多个线程中访问它是安全的,然而只能在一个线程中去处理其事件循环。如果你想在多线程中轮询IO,那么你需要为每个线程分配一个event_base。注意未来...原创 2019-09-20 14:31:08 · 272 阅读 · 0 评论 -
5、《Libevent中文帮助文档》学习笔记5:设置LibEvent库
LibEvent在进程中有一些影响整个库的全局设置,在你调用LibEvent库中任何一个部分之前都需要进行设置,否则libEvent将会进入不一致的状态。1 日志LibEvent能记录内部的错误和警告日志,如果编译进日志支持功能,也会记录调试信息。默认情况下这些消息都是输出到stderr,你也可以通过提供自己的日志函数的方法来覆盖这种行为。接口#define EVENT_LOG_...原创 2019-09-19 17:21:50 · 288 阅读 · 0 评论 -
4、《Libevent中文帮助文档》学习笔记4:Linux下编译libevent
1、下载libevent软件包 直接在官网上下载软件包后解压libevent-2.1.8-stable.tar.gz即可。2、在Linux编译机上编译libevent 运行如下命令,将libevent-2.1.8-stable.tar.gz上传到Linux编译机上:scp libevent*.tar.gzroot@100.**.***.**:/opt/test ...原创 2019-09-19 15:49:07 · 237 阅读 · 0 评论 -
3、《Libevent中文帮助文档》学习笔记3:LibEvent简介
LibEvent是用于编写高速可移植的非阻塞IO库,它的目标是:可移植性:使用LibEvent编写的程序应该在LibEvent支持跨越的所有平台上工作,即使没有更好的方法来处理非阻塞式IO,LibEvent也应该支持一般的方法使程序可以运行在某些限制的环境中; 速度:LibEvent试图在每一个平台实现最快的非阻塞式IO,而不会引入太多的额外开销; 可扩展性:LibEvent设计为即使在成...原创 2019-09-19 15:42:08 · 150 阅读 · 0 评论 -
2、《Libevent中文帮助文档》学习笔记2:一个基于LibEvent 实现的低级 ROT13 Server
下面有另一个版本的ROT13异步服务器,这一次,我们将使用LibEvent2来代替select(),注意fd_sets已经变为:使用通过select()、poll()、epoll()、kqueue()等一系列函数实现的event_base结构来聚合和分离事件。/*For sockaddr_in*/#include <netinet/in.h>/*For socket func...原创 2019-09-19 14:37:37 · 172 阅读 · 0 评论 -
1、《Libevent中文帮助文档》学习笔记1:一个小的异步IO例子
许多初学者往往都是使用阻塞式IO调用进行编程。当你调用一个同步IO的时候,除非操作系统已经完成了操作或者时间长到你的网络堆栈放弃的时候,否则系统是不会返回完成的。举个例子,当你调用"connect"做一个TCP连接的时候,你的操作系统必须排队处理来自发送到服务器的SYN包,除非等到SYN_ACK包从对面接收到,或者是超时,否则操作是不会返回给你的应用程序。这里有一个很简单的阻塞式网络调用的...原创 2019-09-09 19:52:23 · 192 阅读 · 0 评论