select()
、
poll()
或其餘機制的基礎。而是使用對於每一個平臺最高效的高性能解決方案在實現外加上一個包裝器。
1 int main() 2 { 3 4 int serFd; 5 struct sockaddr_in serAddr; 6 7 memset(&serAddr, 0, sizeof(serAddr)); 8 serAddr.sin_family = AF_INET; 9 serAddr.sin_addr.s_addr = inet_addr("127.0.0.1"); 10 serAddr.sin_port = htons(8888); 11 12 13 serFd = socket(AF_INET, SOCK_STREAM, 0); 14 bind(serFd, (struct sockaddr*)&serAddr, sizeof(serAddr)); 15 listen(serFd, 10); 16 17 //初始化一個event_base 18 base = event_base_new(); 19 20 struct event listenEvent; 21 22 //初始化一個event(事件)結構體,設置事件的文件描述符、事件類型(讀IO事件或者寫IO事件等)、 23 //事件被觸發後的回調函數onAccept【該函數須要咱們本身實現】、回調函數的參數 24 //EV_PERSIST表示事件的回調函數執行完後,不會把事件listenEvent從base中移除 25 event_set(&listenEvent, serFd, EV_READ|EV_PERSIST, onAccept, NULL); 26 27 //給listenEvent事件設置相應的event_base 28 event_base_set(base, &listenEvent); 29 30 //把事件添加到隊列(就緒隊列、active隊列等),隊列由event對應的event_base管理 31 event_add(&listenEvent, NULL); 32 33 //啓動輪詢 34 event_base_dispatch(base); 35 36 return 0; 37 }
回調函數:編程
1 //回調函數包含三個參數 2 //參數1:事件對應的文件描述符 3 //參數2:事件對應的行爲 EV_READ|EV_PERSIST 4 //參數3:在event_set函數傳入的參數的指針 5 void onAccept(int serFd, short iEvent, void *arg) 6 { 7 //listenEvent事件的回調函數 8 }