服务端EPOLLET模式,两个线程,主线程和socket check线程。socket check线程的作用是检查心跳包的时间,如果心跳包超时,则主动close对应的socket,而不管这个socket是否还没关闭,这时将会触发主线程的epollin事件。主线程recv,errno返回EBADF(Bad file number)。请问对于主线程的epollin事件,怎样才可以识别是因为自己close socket引起的? socket check线程 部分代码 struct epoll_event ev; epoll_ctl(p->kdpfd, EPOLL_CT...
RT.... 大概程序如下: [code]struct epoll_event ev, revents[maxevents]; /* one fd is socket */ ev.data.fd = sockfd; ev.events = epollin | EPOLLPRI | EPOLLERR | EPOLLHUP; epoll_ctl(epfd, EPOLL_CTL_ADD, ev.data.fd, &ep); for(;;){ nfds = epoll_wait(epfd, revents, maxevents, -1); if(nfds > 0){ ... if(revents.data.fd == sockfd){ if(revents.events & epollin){ nread...
hi,all 最近在开发一个网络游戏服务器,使用epoll的ET模式。看了网上很多的资料,一些基本的概念, 例如accept和recive要到返回EAGAIN或EWOULDBLOCK才停止。 问题: 如EPOLL的作者Davide Libenzi所说,如果你对一fd同时注册epollin | EPOLLOUT事件, 即使发送缓冲区并非由满变空,也会触发EPOLLOUT事件(参考链接:http://www.0x61.com/forum/post3712824.html)。 他指出使用epoll的最好是用ATM模式,当真正需要用...