现有的UDP套接字程序是这样编写的(阻塞模式):
while (true) {
poll();
if (POLLIN is set) {
read(fd, buf, bufSize);
}
}
对于 UDP,每个 read() 读取 1 个且仅读取 1 个数据报(数据包)。如果套接字recv buf中有多个可用数据包,则上述代码在每次read()时仅读取1个数据包。我的问题是:下一个 poll() 会立即返回,因此上面的代码仍然可以很快地从套接字读取吗?或者下一个 poll() 是否可以等待,直到有新的数据包到达套接字,从而代码实际上落后于读取?
文档似乎建议只要缓冲区中有数据,下一个 poll() 就会立即返回。但代码阅读起来似乎落后了,不知道原因是在上面的代码中还是其他地方。
首选方式可能是:
set the socket to non blocking
read in the loop until errno = EWOULDBLOCK or EAGAIN
谢谢。
最佳答案
如果调用poll()
时套接字缓冲区中已经有数据,则在请求POLLIN
时应立即发出POLLIN
信号,是的。在发送 POLLIN
信号之前,它不应等待下一个数据包到达缓冲区。
关于sockets - 如果上次 read() 没有读取到数据, poll() 会立即返回 UDP 套接字吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38254042/