我在应用程序中使用 select() 调用的方式与此处使用的方式相同: beej.us/guide/bgnet/examples/selectserver.c
也就是说,我正在调用 select(),循环遍历所有文件描述符来处理数据,然后再次调用 select()。但是,我想知道在循环和处理数据时到达的数据会发生什么情况? select() 会立即返回,还是会等到看到新数据?
问题的核心是,当有可用的(旧)数据给recv()时,select是立即返回,还是等待新数据到达?
最佳答案
如果有可用数据,select() 会立即返回。它不会等待更多数据到达。如果没有数据,则会阻塞并等待。
在某种程度上,这必须是正确的,因为带有 O_NONBLOCK 标志的文件描述符永远不会阻塞,但 select() 必须仍然有效。
关于network-programming - 处理 select() 时到达的数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17538074/