天天看點

socket屬性設定與初始化操作

libevent是一個事件觸發的網絡庫,适用于windows、linux、bsd等多種平台,内部使用select、epoll、kqueue等系統調用管理事件機制。著名分布式緩存軟體memcached也是libevent based,而且libevent在使用上可以做到跨平台,而且根據libevent官方網站上公布的資料統計,似乎也有着非凡的性能。

在使用Libevent之前,需要初始化一個event_base結構。每一個event_base結構提包含了events集合并選擇事件類型。如果選擇locking方式,會保證互動是線程安全的。如果需要使用多線程模型的話,需要為每一個線程建立一個event_base。

select、poll、epoll、kqueue、devpoll、evport、win32

`event_base_new`會根據預設的配置參數傳回一個`event_base`結構體,失敗傳回`NULL`。

`event_config_new`可以傳回一個配置資訊的結構體,通過修改結構提内容,并作為參數傳遞給`event_base_new_with_config`可以生成目标`event_base`,而`event_config_free`使用來是放掉config配置資訊的。

可以使用`event_config_set_num_cpus_hint(struct event_config *cfg, int cpus)`設定`n_cpu_hint`,但是目前隻支援使用IOCP的情況下。

`require_features`的具體結構如下:

socket屬性設定與初始化操作
socket屬性設定與初始化操作

通過`event_config_require_features(struct event_config *cfg, int features)`函數來設定`require_features`。

需要注意的是,當需要設定多個參數的時候需要使用 `EV_FEATURE_O1 | EV_FEATURE_FDS`操作,而不是多次調用該函數。如果設定不當,找不當對應的事件方法method,`event_base_new_with_config(cfg)會傳回NULL`。

最後一個參數`flag`指定其他的配置:

socket屬性設定與初始化操作
socket屬性設定與初始化操作

通過`event_config_set_flag(struct event_config *cfg, enum event_base_config_flag flag)`進行設定。

socket屬性設定與初始化操作
socket屬性設定與初始化操作

預設情況下會設定相同的優先級。

socket屬性設定與初始化操作
socket屬性設定與初始化操作

考慮到多個平台的相容性(并不是所有平台都支援某一函數功能),`libevent`自身提供了很多函數以及資料類型,下面的函數均是是跨平台的,在Unix以及windows都可以正常運作。

socket屬性設定與初始化操作
socket屬性設定與初始化操作

關閉socket:在`unix`中,隻需要調用`close()`,而在`windows`中需要調用`closesocket()`。

擷取socket錯誤資訊

設定非阻塞模式

位址重用

socketpair

該函數和unix中的socketpair一樣,它會産生兩個連接配接socket,一個用于輸入,一個用于輸出。注意,在windows中,隻支援family=AF_INET,type=SOCK_STREAM,protocol=0。

該函數生成n長度的buf資料

本文轉自cococo點點部落格園部落格,原文連結:http://www.cnblogs.com/coder2012/p/4259118.html,如需轉載請自行聯系原作者

繼續閱讀