在linux中使用libevent时默认使用的方法是epoll,但是有时候我们因为项目需要就需要使用select而不是epoll这个时候可以通过函数event_config_avoid_method(config, "");来进行设置,通过函数名我们可以知道,该函数是制定了要避免使用嗯哪种方法,要是想使用select可以通过以下方法来实现

因为linux中只支持epoll poll select将, epoll和poll都不使用了之后就只能使用select了,

 event_config_avoid_method(config, "epoll");event_config_avoid_method(config, "poll");

具体的是实现代码如下:


#include <event2/event.h>
#include <event2/thread.h>
#include <event2/listener.h>
#include <signal.h>
#include <iostream>
#include <string.h>
#include "event_interface.h"using namespace std;int main()
{//忽略管道信号,发送数据给已关闭的socketif (signal(SIGPIPE, SIG_IGN) == SIG_ERR)return 1;//创建配置上下文//该对象创建出来是为了配置事件的规则信息使用的event_config *config = event_config_new();//显示支持的网络模式const char **methods =   event_get_supported_methods();cout << "support methods " << endl;for(int i = 0; methods[i] != NULL; i++){cout << methods[i] << endl;}//设置特征,确认特征时候生效//这个features在linux中设置没有效果,因为linux中本来就是支持ET模式的,边缘触发模式// 设置了EV_FEATURE_FDS其他特征嗯就无法设置//也就是所支持了EV_FEATURE_FDS  其他的特征都是无法支持的// event_config_require_features(config, EV_FEATURE_FDS); //不支持epoll// event_config_require_features(config, EV_FEATURE_FDS); //设置网络模型使用selectevent_config_avoid_method(config, "epoll");event_config_avoid_method(config, "poll");/*int ret = event_config_require_features(config, EV_FEATURE_ET|EV_FEATURE_EARLY_CLOSE);if(OK != ret){cerr << "event config require features failed." << endl;return ERROR; }*///初始化libevent上下文//这个上下的茶创建是随着配置信息生成的event_base *base =  event_base_new_with_config(config);//config一旦配置好就不需要在使用了//也就是所所有的配置信息需要在这之前进行销毁event_config_free(config);if(!base){cerr << "event base new with config failed!" << endl;//首次失败就创建一个base取默认值,若是再次失败就返回失败base = event_base_new();if(!base){cerr << "event base new failed." << endl; return ERROR;}}else{//获取当前网路模型const char * pBaseName = NULL;pBaseName = event_base_get_method(base);cout << "suport method:" << pBaseName << endl;//确认特征那些生效int f = event_base_get_features(base);if(f&EV_FEATURE_ET){cout << "EV_FEATURE_ET events are supported." << endl;}else{cout << "EV_FEATURE_ET events are not supports." << endl;}if(f&EV_FEATURE_O1){cout << "EV_FEATURE_O1 events are supported." << endl;}else{cout << "EV_FEATURE_O1 events are not supports." << endl;}if(f&EV_FEATURE_FDS){cout << "EV_FEATURE_FDS events are supported." << endl;}else{cout << "EV_FEATURE_FDS events are not supports." << endl;}if(f&EV_FEATURE_EARLY_CLOSE){cout << "EV_FEATURE_EARLY_CLOSE events are supported." << endl;}else{cout << "EV_FEATURE_EARLY_CLOSE events are not supports." << endl;}cout << "event base new with config sucess" << endl;event_base_free(base);}return 0;
}

代码执行结果为:

support methods
epoll
poll
select
suport method:select
EV_FEATURE_ET events are not supports.
EV_FEATURE_O1 events are not supports.
EV_FEATURE_FDS events are supported.
EV_FEATURE_EARLY_CLOSE events are not supports.
event base new with config sucess

libevent中指定使用哪种方法如select相关推荐

  1. JavaScript 删除数组中指定元素(5种方法)

    JavaScript 删除数组中指定元素 在 JavaScript 中,数组是一种常见的数据类型,可以存储多个元素.有时候,我们需要从数组中删除某些特定的元素.本文将介绍如何使用 JavaScript ...

  2. php 正则获取数字,php结合正则获取字符串中数字的几种方法

    本篇文章主要介绍php结合正则获取字符串中数字的几种方法,感兴趣的朋友参考下,希望对大家有所帮助. php结合正则获取字符串中数字<?php $patterns = "/\d+/&qu ...

  3. Javascript循环删除数组中元素的3种方法

    本文主要跟大家分享了关于Javascript循环删除数组中元素的几种方法,分享出来供大家参考学习,下面与微点阅读小编一起来看看详细的介绍: 问题 大家在码代码的过程中,经常会遇到在循环中移除指定元素的 ...

  4. 在MATLAB中生成矩阵的三种方法

    在MATLAB中生成矩阵的三种方法 1. 直接输入法 2. 外部文件读入法 3.特殊矩阵函数生成法 1. 直接输入法 (1)矩阵所有元素必须在[]内 (2)矩阵中同行元素以逗号','或空格分隔 (3) ...

  5. 痞子衡嵌入式:在MDK开发环境下将关键函数重定向到RAM中执行的几种方法

    大家好,我是痞子衡,是正经搞技术的痞子.今天痞子衡给大家分享的是在MDK开发环境下将关键函数重定向到RAM中执行的几种方法. 这个关键函数重定向到 RAM 中执行系列文章,痞子衡已经写过 <IA ...

  6. 痞子衡嵌入式:在IAR开发环境下将关键函数重定向到RAM中执行的三种方法

    大家好,我是痞子衡,是正经搞技术的痞子.今天痞子衡给大家分享的是在IAR开发环境下将关键函数重定向到RAM中执行的三种方法. 嵌入式项目里应用程序代码正常是放在 Flash 中执行的,但有时候也需要将 ...

  7. 在Excel中四舍五入的7种方法

    It's not usually as obvious as the error in the screen shot below, but have you ever seen Excel addi ...

  8. 怎么在html中去掉空白,5种方法去掉HTML中Inline-Block元素之间的空白

    5种方法去掉HTML中Inline-Block元素之间的空白 记得年轻时我在IE6上开发,绝望的希望IE6能支持display: inline-block功能. 当需要在"inline&qu ...

  9. 解析Jquery取得iframe中元素的几种方法

    iframe在复合文档中经常用到,利用jquery操作iframe可以大幅提高效率,这里收集一些基本操作,需要的朋友可以参考下 DOM方法:父窗口操作IFRAME:window.frames[&quo ...

最新文章

  1. Mozilla宣布年底前放弃支持Persona登录服务
  2. 自学python需要买书吗-学习Python的正确姿势—基础教学,教科书该怎么买?
  3. Fedora安装Texlive2013时出现Can't locate Digest/MD5.pm的解决方法
  4. linux 下查看帮助信息
  5. OpenCV学习笔记之OpenCV安装
  6. python为什么是动态语言_python为什么是动态语言
  7. amazeui学习笔记--css(基本样式3)--文字排版Typography
  8. properties文件的分类级别
  9. 红橙Darren视频笔记 万能Dialog builder设计模式
  10. Google也是个人使用非商业?
  11. LINUX SHELL mkdir建立多级目录
  12. c#实现文件转base64和base64转文件(文件为任意格式)
  13. ORACLE动态SQL语句
  14. 小米路由器恢复出厂设置方法详解
  15. 谷歌地球尝试验证时检测到错误_验证码为何越来越难了?
  16. 数据结构——邻接表Adjacency List
  17. AdGuard过滤规则
  18. 图像处理与计算机视觉:2D射影变换
  19. 快能通学生计算机怎么玩游戏规则,无聊的教室游戏攻略大全 新手快速通关技巧汇总[多图]...
  20. c语言实现磁盘存储空间的分配和回收,操作系统磁盘管理 借鉴资料

热门文章

  1. 基于redhat linux虚拟服务器的web负载均衡集群(piranha+LVS)
  2. HD_2553N皇后问题
  3. hdu 5101(二分)
  4. hdu 5358(尺取法)
  5. hdu 3078(LCA+排序)
  6. hdu-4539 郑厂长系列故事――排兵布阵(状态压缩)
  7. VMware安装Linux ubuntu虚拟机
  8. 【ACM】最长公共子序列 - 动态规划
  9. cmd命令大全 DOS窗口命令
  10. 2017年9月18日