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 }