讀寫水位的默認值均爲0。
備註:緩衝區evbuffer中的數據量使用evbuffer_get_length(evbuffer*)
獲取。
備註:以下讀寫回調都是通過bufferevent_setcb()
設置的讀寫回調函數。
讀水位比較好理解。
讀低水位:當讀取緩衝區中的數據量大於等於該水位值後會調用讀回調函數。
讀高水位:當讀取緩衝區中的數據量達到大於等於該水位值後會暫停從套接字中繼續讀取數據,直到讀取緩衝區中的數據量小於該水位值後重新啓動從套接字中讀取數據。
寫水位只有寫低水位有效,寫高水位暫時未使用。
寫低水位:當發送緩衝區中的數據量小於等於該水位值後會調用寫回調函數 。什麼時候發送緩衝區中數據會變小?
bufferevent的設計初衷是爲了發送數據時不阻塞,將要發送的數據寫入到發送緩衝區後直接返回。然後發送緩衝區自己負責將其中的數據發送給對端,當對端收到這些數據同時對之進行確認後,發送緩衝區就可以將這些數據刪除(調用evbuffer_drain()
)。這是發送緩衝區的數據量就會變小,當小於等於寫低水位值後就會調用寫回調函數。比如默認之寫低水位爲0時,當調用bufferevent_write()
後,發送緩衝區中存放這數據,當這些數據實際發送完畢後,數據將會被清空,然後就會調用寫回調函數。