Linux Epoll学习笔记(2)

epoll_wait运行的原理是
等侍注册在epfd上的socket fd的事件的发生,如果发生则将发生的sokct fd和事件类型放入到events数组中。
单个epoll并不能解决所有问题,特别是你的每个操作都比较费时的时候,因为epoll是串行处理的。
epoll 开发框架:
while(1) {
nfds = epoll_wait(kdpfd, events, maxevents, -1);//等待返回事件的数量

for(n = 0; n < nfds; ++n) {//遍历每个发生的事件
if(events[n].data.fd == listener) {
client = accept(listener, (struct sockaddr *) &local,
&addrlen);//将有事件发生的socket接收处理
if(client < 0){
perror("accept");
continue;
}
setnonblocking(client);//设置非阻塞
ev.events = EPOLLIN | EPOLLET;//设置要处理的事件类型
ev.data.fd = client;
if (epoll_ctl(kdpfd, EPOLL_CTL_ADD, client, &ev) < 0) {//注册epoll事件
fprintf(stderr, "epoll set insertion error: fd=%d\n",
client);
return -1;
}
}
else
do_use_fd(events[n].data.fd);//fd中是要处理的数据。Dosomething
}
}
 

这两个网页说的蛮清楚的。

内容版权声明:除非注明,否则皆为本站原创文章。

转载注明出处:https://www.heiqu.com/wywydf.html