網路IO最麻煩的就是多個連線的處理, 要用fork, thread, 或是select, poll之類的方式來處理.
libevent提供了很方便的方式來處理多個連線的問題. 你只要註冊某個file descriptor (socket), 在發生read event時做什麼動作, write event時做什麼動作就可以了. libevent會根據你所在的平台提供的解決方式來幫你選擇.
void callback(int fd, short event, void *arg); //callback function的prototype
struct event ev;
...
event_init(); //初始化
...
//設定fd在發生EV_READ時, 呼叫callback這個function
event_set(&ev, fd, EV_READ | EV_PERSIST, callback, &ev);
event_add(&ev, NULL); //加入event, 沒有設定timeout
在event_set裡面的EV_PERSIST代表執行過callback function之後, 不要把這個event移除. 如果沒有設定這個flag的話, 每次執行過callback function, 就需要event_add一次, 不然這個event就不會作用.
參考資料 :
libevent - http://monkey.org/~provos/libevent/