epoll是否具有指数退避?

时间:2013-05-02 00:04:48

标签: tcp epoll

我有一个应用程序,当它有数据要传输时,使用epoll来知道是否可以写入给定的TCP套接字。

我观察到的是,当TCP连接的远端落后,并且TCP套接字的发送缓冲区开始填充时,epoll返回EPOLLOUT事件的频率似乎经历指数退避。在从套接字写入接收EAGAIN之前发生此行为。

应用程序正在使用EPOLLONESHOT,并在每次发生后进行EPOLL_CTL_MOD调用以重新启动EPOLLOUT事件。但正如我上面提到的,每次后续发生都是指数级的(我有40ms,80ms,160ms,320ms,640ms,1280ms等进展),直到EAGAIN最终发生。

这是epoll的无证特征吗?可以禁用吗?这是一个问题,因为数据变得陈旧,我宁愿丢弃它而不是迟交。

提前致谢。

1 个答案:

答案 0 :(得分:1)

不,但TCP确实如此。 epoll()最多阻止您指定的超时,而不是更长时间。