libevent中指定使用哪种方法如select
生活随笔
收集整理的這篇文章主要介紹了
libevent中指定使用哪种方法如select
小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.
在linux中使用libevent時默認(rèn)使用的方法是epoll,但是有時候我們因為項目需要就需要使用select而不是epoll這個時候可以通過函數(shù)event_config_avoid_method(config, "");來進(jìn)行設(shè)置,通過函數(shù)名我們可以知道,該函數(shù)是制定了要避免使用嗯哪種方法,要是想使用select可以通過以下方法來實現(xiàn)
因為linux中只支持epoll poll select將, epoll和poll都不使用了之后就只能使用select了,
event_config_avoid_method(config, "epoll");event_config_avoid_method(config, "poll");具體的是實現(xiàn)代碼如下:
#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() {//忽略管道信號,發(fā)送數(shù)據(jù)給已關(guān)閉的socketif (signal(SIGPIPE, SIG_IGN) == SIG_ERR)return 1;//創(chuàng)建配置上下文//該對象創(chuàng)建出來是為了配置事件的規(guī)則信息使用的event_config *config = event_config_new();//顯示支持的網(wǎng)絡(luò)模式const char **methods = event_get_supported_methods();cout << "support methods " << endl;for(int i = 0; methods[i] != NULL; i++){cout << methods[i] << endl;}//設(shè)置特征,確認(rèn)特征時候生效//這個features在linux中設(shè)置沒有效果,因為linux中本來就是支持ET模式的,邊緣觸發(fā)模式// 設(shè)置了EV_FEATURE_FDS其他特征嗯就無法設(shè)置//也就是所支持了EV_FEATURE_FDS 其他的特征都是無法支持的// event_config_require_features(config, EV_FEATURE_FDS); //不支持epoll// event_config_require_features(config, EV_FEATURE_FDS); //設(shè)置網(wǎng)絡(luò)模型使用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上下文//這個上下的茶創(chuàng)建是隨著配置信息生成的event_base *base = event_base_new_with_config(config);//config一旦配置好就不需要在使用了//也就是所所有的配置信息需要在這之前進(jìn)行銷毀event_config_free(config);if(!base){cerr << "event base new with config failed!" << endl;//首次失敗就創(chuàng)建一個base取默認(rèn)值,若是再次失敗就返回失敗base = event_base_new();if(!base){cerr << "event base new failed." << endl; return ERROR;}}else{//獲取當(dāng)前網(wǎng)路模型const char * pBaseName = NULL;pBaseName = event_base_get_method(base);cout << "suport method:" << pBaseName << endl;//確認(rèn)特征那些生效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; }代碼執(zhí)行結(jié)果為:
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 與50位技術(shù)專家面對面20年技術(shù)見證,附贈技術(shù)全景圖總結(jié)
以上是生活随笔為你收集整理的libevent中指定使用哪种方法如select的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 作者:丁铖(1992-),男,华东师范大
- 下一篇: 专题:大数据安全和隐私保护