Event in Action(3.1) Buffer event
buffer event 專門用于處理io事件,如socket的io。
對(duì)普通event進(jìn)行封裝,當(dāng)epoll返回可寫可讀event的時(shí)候,觸發(fā)框架自帶的回調(diào)函數(shù)進(jìn)行讀寫。自動(dòng)處理類似EWOULDBLOCK的非阻塞讀寫時(shí),可恢復(fù)的errno,以及不可回復(fù)的errno。

回調(diào)函數(shù)中的事件參數(shù) short events:
BEV_EVENT_READING
An event occured during a read operation on the bufferevent. See the other flags for which event it was.
BEV_EVENT_WRITING
An event occured during a write operation on the bufferevent. See the other flags for which event it was.
BEV_EVENT_ERROR
讀寫操作的時(shí)候發(fā)生錯(cuò)誤。
BEV_EVENT_TIMEOUT
超時(shí)。
BEV_EVENT_EOF
對(duì)方關(guān)閉連接。
BEV_EVENT_CONNECTED
本地主動(dòng)關(guān)閉連接。
水位:見下一篇。

這里只說一下參數(shù)三:
BEV_OPT_CLOSE_ON_FREE
free buffer內(nèi)存的時(shí)候自動(dòng)關(guān)閉socket
BEV_OPT_THREADSAFE
多線程安全。
BEV_OPT_DEFER_CALLBACKS
延遲調(diào)用callback,防止爆棧(比如callback1寫入buffer導(dǎo)致buffer滿了,callback2這時(shí)候觸發(fā)(full條件),之間drain空buffer,empty條件又觸發(fā)callback1,如此循環(huán)往復(fù))
BEV_OPT_UNLOCK_CALLBACKS
buffer觸發(fā)事件,調(diào)用callback的時(shí)候,先release mutex

如果要自動(dòng)產(chǎn)生connect的socket:
address為對(duì)端地址。

一些http的東西就不談了,還沒學(xué)

設(shè)定三種callback。
值得一提的是eventcb,在鏈接發(fā)生讀寫之外的事件,或者讀寫觸發(fā)水位線的時(shí)候會(huì)觸發(fā)。
可以通過null來禁用callback。

設(shè)置event以及timeout。
對(duì)普通struct event的封裝
一般不需要禁用讀事件,在input buffer滿了的時(shí)候,框架自動(dòng)停止read,直到buffer又有了新的空間。

水位設(shè)定。

buffer讀寫相關(guān)。不重要的,簡(jiǎn)單看看就會(huì)。復(fù)雜度也很明顯沒什么可討論的。

強(qiáng)迫buffer event預(yù)留足夠的空間。
socket buffer沒有這個(gè)配置。

優(yōu)先級(jí)以及上鎖。如果初始化的時(shí)候沒有設(shè)定BEV_OPT_THREADSAFE,則上鎖沒有任何效果。