我有一个应用程序,当它有数据要传输时,使用epoll来知道是否可以写入给定的TCP套接字。
我观察到的是,当TCP连接的远端落后,并且TCP套接字的发送缓冲区开始填充时,epoll返回EPOLLOUT事件的频率似乎经历指数退避。在从套接字写入接收EAGAIN之前发生此行为。
应用程序正在使用EPOLLONESHOT,并在每次发生后进行EPOLL_CTL_MOD调用以重新启动EPOLLOUT事件。但正如我上面提到的,每次后续发生都是指数级的(我有40ms,80ms,160ms,320ms,640ms,1280ms等进展),直到EAGAIN最终发生。
这是epoll的无证特征吗?可以禁用吗?这是一个问题,因为数据变得陈旧,我宁愿丢弃它而不是迟交。
提前致谢。
答案 0 :(得分:1)
不,但TCP确实如此。 epoll()
最多阻止您指定的超时,而不是更长时间。