gpt4 book ai didi

sockets - 如果从上次read()读取的数据不存在,poll()会立即返回UDP套接字吗?

转载 作者:行者123 更新时间:2023-12-03 11:51:47 25 4
gpt4 key购买 nike

以这种方式为UDP套接字(在阻塞模式下)编写了一个现有程序:

while (true) {
poll();
if (POLLIN is set) {
read(fd, buf, bufSize);
}
}

对于UDP,每个read()只能读取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/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com