2016-07-15 66 views
0

我有一个基于Linux的无线网络应用程序,需要相当难处理延迟。即与没有数据相比,数据包的延迟到达根本没有好处。此外,套接字中的旧数据只能延迟较新的数据。Flush tx udp套接字内核缓冲区以减少延迟

我正在寻找,如果从发送端有任何方法来检测到套接字与旧数据堆积在这种情况下刷新/丢弃它,并发送新的数据。

我知道接收器可以读取所有的旧数据并丢弃。但是,这仍然会起到追赶作用,并不能真正帮助加速,以及是否有发送方选项进行评估。

感谢您的任何帮助。

+0

内核已经尽可能快地将数据发送出发送缓冲区,并且网络在必要时已经将其丢弃。 – EJP

+0

@EJP,谢谢!虽然是的,但有一种尝试在发生断开连接并重新连接的情况下尝试发送缓冲区,内核将首先发送旧数据,并可能在应用程序空间中丢弃/累积数据包,然后从新数据开始。我希望能通过完全清除旧数据来跳转到新数据。 – Ananth

+0

目前我们使用debugfs读取tx队列,并根据设置的上限阈值,我们不会向队列中添加更多数据,并且等待tx队列在输入新数据之前达到低水位,以防止继续加载旧数据数据进入流。我们需要找到一种方法来丢弃tx队列,如果它达到上限并立即触发队列底部的话。 – Ananth

回答

-1

尝试关闭发送端的Nagle算法。该算法尝试将较小的数据包收集到较大的数据包中以减少开销,因此将其关闭可能意味着每个数据包都会立即发送。这里有一个关闭它的代码片段:

void noNagle (int socket) 
{ 
     int on = 1; 
     if (setsockopt (socket, IPPROTO_TCP, TCP_NODELAY, &on, sizeof(on)) < 0) 
      bye ("Can not disable nagle algorithm\n"); 
} 
+0

Nagle算法是TCP的一部分,而不是UDP。 – EJP

+0

很对...很抱歉。 – pidloop