Chinaunix首页 | 论坛 | 博客
  • 博客访问: 96108
  • 博文数量: 31
  • 博客积分: 0
  • 博客等级: 民兵
  • 技术积分: 380
  • 用 户 组: 普通用户
  • 注册时间: 2014-02-24 22:04
文章分类

全部博文(31)

文章存档

2014年(31)

我的朋友

分类: C/C++

2014-05-29 10:51:52



主要的宏定义:


点击(此处)折叠或打开

  1. //设定链表类型
  2. #define EVLIST_TIMEOUT    0x01 //超时链表
  3. #define EVLIST_INSERTED    0x02    //初始链表,若该event刚刚被加入eventbase中,则进入到EVLIST_INSERTED链表
  4. #define EVLIST_SIGNAL    0x04    //信号链表
  5. #define EVLIST_ACTIVE    0x08    //激活的event链表
  6. #define EVLIST_INTERNAL    0x10    //内部链表
  7. #define EVLIST_INIT    0x80    //

点击(此处)折叠或打开

  1. /* EVLIST_X_ Private space: 0x1000-0xf000 */
  2. #define EVLIST_ALL    (0xf000 | 0x9f) //所有链表类型的或操作得到的

点击(此处)折叠或打开

  1. //event类型
  2. #define EV_TIMEOUT    0x01 //超时
  3. #define EV_READ        0x02 //读
  4. #define EV_WRITE    0x04 //写
  5. #define EV_SIGNAL    0x08 //信号
  6. #define EV_PERSIST    0x10    /* Persistant event */


点击(此处)折叠或打开

  1. //日志级别
  2. #define _EVENT_LOG_DEBUG 0  //DEBUG
  3. #define _EVENT_LOG_MSG 1    //MSG
  4. #define _EVENT_LOG_WARN 2    //WARN
  5. #define _EVENT_LOG_ERR 3    //ERR

点击(此处)折叠或打开

  1. /**
  2.  event_loop() flags
  3.  */
  4. /*@{*/
  5. #define EVLOOP_ONCE    0x01    /**< Block at most once. */
  6. #define EVLOOP_NONBLOCK    0x02    /**< Do not block. */


主要的数据结构:

点击(此处)折叠或打开

  1. struct event {
  2.     TAILQ_ENTRY (event) ev_next; //该指针指向event_base中eventqueue链表的下一个元素
  3.     TAILQ_ENTRY (event) ev_active_next;//该指针指向event_base中的activequeue[i]链表的下一个元素
  4.     TAILQ_ENTRY (event) ev_signal_next;//该指针指向event_base中的sig结构中的evsigevents[i]链表的下一个元素
  5.     unsigned int min_heap_idx;    /* for managing timeouts *///该结构标识该event在最小堆的序号

  6.     struct event_base *ev_base; //指向event_base

  7.     int ev_fd; //文件fd
  8.     short ev_events; //事件类型,如EV_TIMEOUT,EV_READ,EV_WRITE等
  9.     short ev_ncalls; //该事件的回调函数被执行的次数
  10.     short *ev_pncalls;    /* Allows deletes in callback */ //指向ev_ncalls

  11.     struct timeval ev_timeout; //该event的超时时间

  12.     int ev_pri;        /* smaller numbers are higher priority *///该event的优先级

  13.     void (*ev_callback)(int, short, void *arg); //该event被触发的回调函数
  14.     void *ev_arg; //回调函数参数

  15.     int ev_res;        /* result passed to event callback */
  16.     int ev_flags; //标识该event是在哪个链表之中,可以是EVLIST_TIMEOUT,EVLIST_INSERTED,EVLIST_ACTIVE,EVLIST_INTERNAL的组合
  17. }

evhttp的主要结构(待分析)


点击(此处)折叠或打开

  1. /*
  2.  * Key-Value pairs. Can be used for HTTP headers but also for
  3.  * query argument parsing.
  4.  */
  5. struct evkeyval {
  6.     TAILQ_ENTRY(evkeyval) next;

  7.     char *key;
  8.     char *value;
  9. }

evbuffer的主要结构(待分析)

点击(此处)折叠或打开

  1. struct evbuffer {
  2.     u_char *buffer;
  3.     u_char *orig_buffer;

  4.     size_t misalign;
  5.     size_t totallen;
  6.     size_t off;

  7.     void (*cb)(struct evbuffer *, size_t, size_t, void *);
  8.     void *cbarg;
  9. }

点击(此处)折叠或打开

  1. /* Just for error reporting - use other constants otherwise */
  2. #define EVBUFFER_READ        0x01
  3. #define EVBUFFER_WRITE        0x02
  4. #define EVBUFFER_EOF        0x10
  5. #define EVBUFFER_ERROR        0x20
  6. #define EVBUFFER_TIMEOUT    0x40


点击(此处)折叠或打开

  1. struct bufferevent;
  2. typedef void (*evbuffercb)(struct bufferevent *, void *);
  3. typedef void (*everrorcb)(struct bufferevent *, short what, void *)


点击(此处)折叠或打开

  1. struct event_watermark {
  2.     size_t low;
  3.     size_t high;
  4. }


点击(此处)折叠或打开

  1. struct bufferevent {
  2.     struct event_base *ev_base;

  3.     struct event ev_read;
  4.     struct event ev_write;

  5.     struct evbuffer *input;
  6.     struct evbuffer *output;

  7.     struct event_watermark wm_read;
  8.     struct event_watermark wm_write;

  9.     evbuffercb readcb;
  10.     evbuffercb writecb;
  11.     everrorcb errorcb;
  12.     void *cbarg;

  13.     int timeout_read;    /* in seconds */
  14.     int timeout_write;    /* in seconds */

  15.     short enabled;    /* events that are currently enabled */
  16. }





阅读(893) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~