4.2 检查event_base后端

有时候需要检查 event_base 支持哪些特征,或者当前使用哪种方法。

接口1

  1. const char **event_get_supported_methods(void);

event_get_supported_methods()函数返回一个指针 ,指向 libevent 支持的方法名字数组 。 这个数组的最后一个元素是 NULL。

实例:

  1. int i;
  2. const char **methods = event_get_supported_methods();
  3. printf("Starting Libevent %s. Available methods are:\n",
  4. event_get_version());
  5. for (i=0; methods[i] != NULL; ++i) {
  6. printf(" %s\n", methods[i]);
  7. }

这个函数返回 libevent 被编译以支持的方法列表 。然而 libevent 运行的时候,操作系统可能 不能支持所有方法。比如说,可能 OS X 版本中的 kqueue 的 bug 太多,无法使用。

接口2

  1. const char *
  2. event_base_get_method(const struct event_base *base);
  3. enum event_method_feature
  4. event_base_get_features(const struct event_base *base);

event_base_get_method()返回 event_base 正在使用的方法。

event_base_get_features ()返回 event_base 支持的特征的比特掩码。

实例

  1. struct event_base *base;
  2. enum event_method_feature f;
  3. base = event_base_new();
  4. if (!base) {
  5. puts("Couldn't get an event_base!");
  6. } else {
  7. printf("Using Libevent with backend method %s.",
  8. event_base_get_method(base));
  9. f = event_base_get_features(base);
  10. if ((f & EV_FEATURE_ET))
  11. printf(" Edge-triggered events are supported.");
  12. if ((f & EV_FEATURE_O1))
  13. printf(" O(1) event notification is supported.");
  14. if ((f & EV_FEATURE_FDS))
  15. printf(" All FD types are supported.");
  16. puts("");
  17. }