转载请注明出处: http://blog.youkuaiyun.com/luotuo44/article/details/38443569
前面的博文都是讲一些Libevent的一些辅助结构,现在来讲一下关键结构体:event_base。
这里作一个提醒,在阅读Libevent源码时,会经常看到backend这个单词。其直译是“后端”。实际上其指的是Libevent内部使用的多路IO复用函数,多路IO复用函数就是select、poll、epoll这类函数。本系列博文中,为了叙述方便,“多路IO复用函数”与“后端”这两种说法都会采用。
配置结构体:
通常我们获取event_base都是通过event_base_new()这个无参函数。使用这个无参函数,只能得到一个默认配置的event_base结构体。本文主要是讲一些怎么获取一个非默认配置的event_base以及可以对event_base进行哪些配置。
还是先看一下event_base_new函数吧。//event.c文件
struct event_base *
event_base_new(void)
{
struct event_base *base = NULL;
struct event_config *cfg = event_config_new();
if (cfg) {
base = event_base_new_with_config(cfg);
event_config_free(cfg);
}
return base;
}
可以看到,其先创建了一个event_config结构体,并用cfg指针指向之,然后再用这个变量作为参数调用event_base_new_with_config。因为并没有对cfg进行任何的设置,所以得到的是默认配置的event_base。
从这里也可以知道,如果要对event_base进行配置,那么对cfg变量进行配置即可。现在我们的目光从event_base结构体转到event_config结构体。
先来看看event_config结构体的定义。
struct event_config {
TAILQ_HEAD(event_configq, event_config_entry) entries;
int n_cpus_hint;
enum event_method_feature require_features;
enum event_base_config_flag flags;
};
struct event_config_entry {
TAILQ_ENTRY(event_config_entry) next;
const char *avoid_method;
};
我们要做的就是对event_config结构体的那四个成员变量进行配置。