4

如果我要在 Linux 上接收 UDP 数据包(并且我不介意更改一些源代码),我的应用程序读取数据包的最快方法是什么?

我是否想修改网络堆栈,以便在收到 UDP 数据包后将其写入共享内存并让应用程序访问该内存?

堆栈是否有办法通知应用程序做出反应,而不是让应用程序不断轮询共享内存?

欢迎任何建议/进一步的资源 - 我只见过:

http://www.kegel.com/c10k.html

4

1 回答 1

0

如果延迟是一个问题并且默认的 UDP 网络堆栈没有按照您的意愿执行,那么请尝试使用不同的现有(可安装)网络堆栈。

例如,尝试UDP Lite,与标准 UDP 堆栈相比,此特定堆栈不对 UDP 数据报执行任何校验和,从而以向应用层提供损坏的数据报为代价来减少延迟。

旁注:您不需要有“轮询”机制。阅读select(可能是类似pselector的派生词ppoll)的手册,使用这样的 API,一旦在管道中有要读取或写入的内容,内核就会“唤醒”您的应用程序。

于 2013-03-15T08:06:26.793 回答