ChinaUnix.net
相关文章推荐:

Epoll读写事件触发时机

Server: epfd = epoll_create(4096); ev.events = epollIN | POLLOUT; epoll_ctl(epfd, epoll_CTL_ADD, sockfd, &ev); while (1) { int nfds = epoll_wait(epfd, &events, 4096, -1); for (int i = 0;i < nfds;i++) { if (event1s.events&epollIN) { //读事件处理 } if (event1s.events&POLLOUT) { //写事件处理 } //其他事件处理。。。 } } 疑问: 1。在上面的模式中,epoll_wait()的P...

by eagle518 - C/C++ - 2008-01-19 21:41:33 阅读(5127) 回复(11)

相关讨论

1、listen fd,有新连接请求,触发epollIN。 2、对端发送普通数据,触发epollIN。 3、带外数据,只触发epollPRI。 4、对端正常关闭(程序里close(),shell下kill或ctr+c),触发epollIN和epollRDHUP,但是不触发epollERR和epollHUP。 关于这点,以前一直以为会触发epollERR或者epollHUP。:oops: 再man epoll_ctl看下后两个事件的说明,这两个应该是本端(server端)出错才触发的。 5、对端异常断开连接(只测了拔网线),...

by yangsf5 - C/C++ - 2009-03-13 15:52:32 阅读(4024) 回复(7)

epoll ET 模式下: 一开始以为对端read,会出发这端的可写事件发生,结果不是这样。 只有第一次连接到服务器端的时候会触发一次可写事件epollOUT),没有触发可读(epollIN)。 触发可写事件,除去连接、关闭的时候,其他还有啥情况触发? 欢迎发言。 [ 本帖最后由 amoyppa 于 2008-9-3 17:31 编辑 ]

by amoyppa - C/C++ - 2008-09-04 17:38:47 阅读(7121) 回复(15)

epoll的ET模式下,有时会发生如下的问题 1. epoll触发FD=A的事件 。 2.处理FD=A的事件并销毁A(即epoll_ctl_del(A)并close(A) ) 。 3.epoll再次触发FD=A的事件 。 如果这时候对象已经被删除或被重用,程序就会出现问题 。 哪位大侠解释下,不胜感激。

by lxyfirst - C/C++ - 2009-05-14 22:13:36 阅读(3278) 回复(7)

epoll会报的事件会不会有丢失而未报告的?

by UnixStudier - C/C++ - 2008-05-21 17:41:53 阅读(2143) 回复(3)

epoll 事件中发现 就epollIN , epollOUT , epollPRI可以用. epollERR 和 epollHUP什么情况下才能监测出这种问题啊. 我的内核是2.6.20 可是用epollRDHUP的时候编译包错. RecvMessThread.cpp:48: error: ‘epollRDHUP’ was not declared in this scope 请问还的include什么头文件啊... 谢谢了啊.

by ruchong - C/C++ - 2007-07-11 16:20:45 阅读(1727) 回复(0)

1. 我将listen_fd 设置为nonblock 然后用epollET + epollIN 加入到epoll events中. 当压力测试时(800个客户端), 一开始的时候接收连接有点儿迟钝, 但马上就好起来了. 总之. 效果不如水平触发的 观察日志, 发现在接收 fd=319 后, 3秒钟后才接收到fd = 320, 多次测试后, 发现总是在三百多个连接后,出现3种钟的间隔. 2. 我要所有connection fd 设置为nonblock 然后用epollET + epollIN 加入到epoll events中. 当压力测试时...

by cookis - C/C++ - 2012-04-08 19:22:23 阅读(26725) 回复(74)

我用边缘触发模式实现了多线程轮循epoll的功能. 但我发现在 一个句柄在读到EAGAIN 之前还会被epoll返回可读事件.. 不知为何.. [code] while (1) { int len = 0; if (this->msg_body_recv_pos_ == 0) // msg body is not recv or recv completely { if (this->msg_header_recv_pos_ == 0) { this->msg_...

by cookis - C/C++ - 2008-06-02 19:28:13 阅读(2749) 回复(4)

epollET:表示对应的文件描述符有事件发生; 我想问的是:当ev.events = epollIN | epollOUT | epollET的时候,这时描述符可以读,epoll_wait已经不被阻塞,返回的ev.events应该是epollIN,但是如果还没有读到EAGAIN,这时候,描述符可以写了,在调用epoll_wait的时候,是否会有该事件

by smzgl - C/C++ - 2008-04-04 19:32:54 阅读(1736) 回复(3)

一个套接字已经以epollIN | epollET的形式加入到了epoll中,并且主线程处于epoll_wait的阻塞中。这时,该套接字有读事件触发epoll_wait,在该套接字未被读取至EAGAIN, 但此时子线程已经将该该套接字写至EAGAIN。如果这时,子线程调用epoll_ctl修改套接字事件为:epollIN | epollOUT | epollET,那么调用在调用该套接字的读事件是否被再次触发? [ 本帖最后由 smzgl 于 2008-4-8 11:49 编辑 ]

by smzgl - C/C++ - 2008-04-08 11:25:32 阅读(1208) 回复(0)

现在我程序的架构,epoll线程等待事件触发,然后将事件放到一个队列当中,通知工作线程开始工作。几个工作线程顺序取走事件,并做处理。 假设我的程序逻辑只是简单的转发,从一端读取,从另一端发走,唯一的要求就是严格按顺序收发。 现在遇到这样一个问题,假设只有一条连接的时候,连续触发的可读事件都是同一个fd, 那几个工作线程同时读一个fd,可能造成数据顺序改变。比如4个线程,缓冲区大小都是1500,read的时候这1500字节的...

by berniechen - C/C++ - 2009-08-26 15:28:04 阅读(4709) 回复(6)