【发布时间】:2015-11-15 00:19:02
【问题描述】:
我想使用recvmmsg 调用一次从一个单一套接字读取多个UDP 消息。我正在从单个多播组中读取数据。
当我读取 TCP 数据时,我通常使用带有非阻塞套接字(和超时)的poll/select,以便在准备好读取时得到通知。我采用这种方法,因为我知道虚假唤醒问题和阻塞套接字的潜在问题。
由于我的应用程序必须非常快,如果我采用与 recvmmsg 相同的方法,我将引入一个额外的系统调用 (poll/select),这可能会减慢执行速度。
所以我的两个问题如下:
- 使用 UDP,我可以使用
recvmmsg而不使用poll/select安全地从 BLOCKING 套接字读取,还是必须应用我用于 TCP 的相同原理(非阻塞 + 轮询)? - 假设我有大量的多播流量,你会选择非阻塞套接字 +
recvmmsgonly(无投票)并消耗大量 CPU 吗?
我正在使用 Linux:CentOS 7 和 Oracle Linux。
【问题讨论】:
-
请注意,是否使用 poll/select + 非阻塞套接字取决于您是否需要同时处理多个套接字或读取/写入,而不是使用 TCP 还是 UDP。
标签: c linux sockets multicast recvmmsg