返回信息流以下是在网上搜到的信息:
epoll_wait运行的原理是
等侍注册在epfd上的socket fd的事件的发生,如果发生则将发生的sokct fd和事件类型放入到events数组中。
并 且将注册在epfd上的socket fd的事件类型给清空,所以如果下一个循环你还要关注这个socket fd的话,则需要用epoll_ctl(epfd,EPOLL_CTL_MOD,listenfd,&ev)来重新设置socket fd的事件类型。
我想知道,“并且将注册在epfd上的socket fd的事件类型给清空”是不是真的?
如果是真的,为什么以下代码没有从新设置listerner
for(;;) {
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);
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) {
fprintf(stderr, "epoll set insertion error: fd=%d\n",
client);
return -1;
}
}
else
do_use_fd(events[n].data.fd);
}
}
在线等待。。。。。
这是一条镜像帖。来源:北邮人论坛 / cpp / #7943同步于 2008/5/31
该镜像源已超过 30 天没有更新,可能在源站已被删除。
CPP机器人发帖
请教一个epoll的问题
redfox
2008/5/31镜像同步1 回复
订阅后,新回复会通过你的通知中心匿名送达。
1 条回复