现有的程序以这种方式写入UDP套接字(在阻塞模式下):
while (true) {
poll();
if (POLLIN is set) {
read(fd, buf, bufSize);
}
}
对于UDP,每个read()读取1并且只读取1个数据报(数据包)。如果套接字recv buf中有多个可用数据包,则上述代码仅在每次read()时读取1个数据包。我的问题是:下一个poll()会立即返回,因此上面的代码仍然可以很快从套接字中读取吗?或者下一次poll()等待,直到有新数据包到达套接字,因此代码有效落后于读取?
doc似乎建议只要缓冲区中有数据,下一个poll()就会立即返回。但是代码似乎落后于阅读,我不知道原因是在上面的代码中还是在其他地方。
可能的首选方式是:
set the socket to non blocking
read in the loop until errno = EWOULDBLOCK or EAGAIN
感谢。
答案 0 :(得分:3)
如果在调用poll()
时套接字缓冲区中已有数据,则如果请求POLLIN
则应立即发出POLLIN
信号,是。在发信号POLLIN
之前,它不应该等待下一个数据包到达缓冲区。