随笔分类 - libevent
libevent源码分析
摘要:event_add、event_del两个函数分别是使event生效和失效的,下面就来看一下两个函数的实现。 event_add 这里以epoll作为后端来举例分析event_add函数的调用流程: event_del 这里以epoll作为后端来分析event_del的调用流程: 结论: 到这里ev
阅读全文
摘要:这篇文章源于我看libevent的源码时想到的问题,对于libevent的buffer机制,如果接受端一直不取数据的话,会怎样?如果丢包,不现实,因为会导致数据丢失,如果不丢包,就会导致占用内存一直扩大。 由此我想到对于tcp/udp如果一直发,接收端不调用recv取数据会怎样,是会导致send失败
阅读全文
摘要:evmap_io_active_函数用于将激活指定文件描述符上的事件 遍历evmap_io的成员events,在每一次遍历中实际调用ev_active_nolock_ 该函数在最后又调用函数event_callback_activate_nolock 该函数最后又调用event_queue_inse
阅读全文
摘要:epoll后端机制的实现代码在epoll.c文件中。 1 /* 2 * Copyright 2000-2007 Niels Provos <provos@citi.umich.edu> 3 * Copyright 2007-2012 Niels Provos, Nick Mathewson 4 *
阅读全文
摘要:在分析libevent源码并实现自己的网络库的时候想到这样一个问题:为什么注册事件的时候总是替换着注册EPOLLIN和EPOLLOUT呢? 于是我就在接收新连接注册新连接的监听事件时把EPOLLIN和EPOLLOUT都注册上了,结果就是,一直进EPOLLOUT,也就是说连接的套接字一直都可以可写的,
阅读全文
摘要:http-server例子是libevent提供的一个简单web服务器,实现了对静态网页的处理功能。 1 /* 2 * gcc -g -o http-server http-server.c -levent 3 */ 4 #include <stdio.h> 5 #include <stdlib.h
阅读全文
摘要:listener是libevent封装的一个方便生成监听者的一组结构和函数,其中包括: 1 /* 2 * Copyright (c) 2000-2007 Niels Provos <provos@citi.umich.edu> 3 * Copyright (c) 2007-2012 Niels Pr
阅读全文
摘要:hello-world是libevent自带的一个例子,这个例子的作用是启动后监听一个端口,对于所有通过这个端口连接上服务器的程序发送一段字符:hello-world,然后关闭连接。 1 /* 2 * gcc -g -o hello-world hello-world.c -levent_core
阅读全文
摘要:signal-test是libevent自带的一个例子,展示了libevent对于信号事件的处理方法。 1 #include <sys/types.h> 2 3 #include <event2/event-config.h> 4 5 #include <sys/stat.h> 6 #include
阅读全文
摘要:eventop:定义了event_base使用的后端IO复用的一个统一接口 定义的成员包括: 1、name:后端的名字,例如:select、poll、epoll 2、init:用来初始化一个event_base来使用这个后端的函数。 3、add:激活一个给定文件描述符或者信号上的读或写。 4、del
阅读全文
摘要:time-test例子是libevent自带的一个例子,通过libevent提供的定时事件来实现,间隔固定时间打印的功能。 1 /* 2 * gcc -g -o time-test time-test.c -levent_core 3 */ 4 5 #include <sys/types.h> 6
阅读全文
摘要:在libevent中,获取event类型对象的方法有两种,event_assign、event_new 1、event_assign() 实现: 其实event_assign的作用就是把给定的event类型对象的每一个成员赋予一个指定的值。 2、event_new() 实现: event_new的实
阅读全文
摘要:struct bufferevent定义在文件bufferevent_struct.h中。 libevent中的event结构对应套接字的某一个事件,读或者写,bufferevent结构对应一个套接字,其中有两个event结构:evread、evwrite。 对bufferevent的操作主要有:
阅读全文
摘要:struct evbuffer定义在evbuffer-internal.h文件中。 evbuffer结构内部保存一个以evbuffer-chain结构为节点的链表,evbuffer内部有两个分别指向首尾节点的指针。 struct evbuffer_chain: evbuffer-chain结构内部保
阅读全文
摘要:分析libevent的源代码,我的想法的是先分析各种结构体,struct event_base、struct event,然后是event_base_new函数、event_new函数、event_add函数,最后分析event_base_dispatch函数。 一、各种结构体 1、event_ba
阅读全文