我想使用该recvmmsg
调用一次从一个单个套接字读取多个 UDP 消息。我正在从单个多播组中读取数据。
当我读取 TCP 数据时,我通常使用poll/select
非阻塞套接字(和超时),以便在准备好读取时得到通知。我遵循这种方法,因为我知道虚假唤醒问题和阻塞套接字的潜在问题。
由于我的应用程序必须非常快,如果我采用相同的方法,recvmmsg
我将引入一个额外的系统调用 ( poll/select
),这可能会减慢执行速度。
所以我的两个问题如下:
recvmmsg
使用 UDP,我可以使用without安全地从 BLOCKING 套接字读取,poll/select
还是必须应用与 TCP 相同的原理(非阻塞 + 轮询)?- 假设我有大量的多播流量,你会只选择非阻塞套接字+
recvmmsg
(无轮询)并消耗大量 CPU 吗?
我正在使用 Linux:CentOS 7 和 Oracle Linux。