0

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

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

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

这是 epoll 的未记录功能吗?可以禁用吗?这是一个问题,因为数据变得陈旧,我宁愿丢弃它而不是延迟发送。

提前致谢。

4

1 回答 1

1

不,但 TCP 可以。epoll()最多阻塞您指定的超时时间,而不是更长的时间。

于 2013-05-02T00:21:35.847 回答