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