【发布时间】:2013-05-02 00:04:47
【问题描述】:
我有一个应用程序,当它有数据要传输时,它使用 epoll 来了解是否可以写入给定的 TCP 套接字。
我观察到的是,随着 TCP 连接的远端落后,并且 TCP 套接字的发送缓冲区开始填满,epoll 返回 EPOLLOUT 事件的频率似乎经历了指数退避。此行为发生在从套接字写入接收 EAGAIN 之前。
应用程序正在使用 EPOLLONESHOT,并在每次发生后进行 EPOLL_CTL_MOD 调用以重新启动 EPOLLOUT 事件。但正如我上面提到的,随后的每一次发生都呈指数级增长(我有 40 毫秒、80 毫秒、160 毫秒、320 毫秒、640 毫秒、1280 毫秒等的进展),直到 EAGAIN 最终发生。
这是 epoll 的一个未记录的特性吗?可以禁用吗?这是一个问题,因为数据变得陈旧,我宁愿丢弃它也不愿延迟发送。
提前致谢。
【问题讨论】:
-
如果担心过时数据,请使用 UDP 而不是 TCP;这就是发明这两种协议的原因。