如果我要在 Linux 上接收 UDP 数据包(并且我不介意更改一些源代码),我的应用程序读取数据包的最快方法是什么?
我是否想修改网络堆栈,以便在收到 UDP 数据包后将其写入共享内存并让应用程序访问该内存?
堆栈是否有办法通知应用程序做出反应,而不是让应用程序不断轮询共享内存?
欢迎任何建议/进一步的资源 - 我只见过:
如果我要在 Linux 上接收 UDP 数据包(并且我不介意更改一些源代码),我的应用程序读取数据包的最快方法是什么?
我是否想修改网络堆栈,以便在收到 UDP 数据包后将其写入共享内存并让应用程序访问该内存?
堆栈是否有办法通知应用程序做出反应,而不是让应用程序不断轮询共享内存?
欢迎任何建议/进一步的资源 - 我只见过:
如果延迟是一个问题并且默认的 UDP 网络堆栈没有按照您的意愿执行,那么请尝试使用不同的现有(可安装)网络堆栈。
例如,尝试UDP Lite,与标准 UDP 堆栈相比,此特定堆栈不对 UDP 数据报执行任何校验和,从而以向应用层提供损坏的数据报为代价来减少延迟。
旁注:您不需要有“轮询”机制。阅读select
(可能是类似pselect
or的派生词ppoll
)的手册,使用这样的 API,一旦在管道中有要读取或写入的内容,内核就会“唤醒”您的应用程序。