network-programming - 处理 select() 时到达的数据

标签 network-programming

我在应用程序中使用 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/

相关文章:

c - TCP 客户端-服务器 "bad address"错误(在 C 中)

无法链接 sctp 二进制文件

linux - 为什么 C99 提示存储大小?

c - 从 macOS 上的单个网络接口(interface)接收多播 UDP 数据包

unit-testing - 在 Go 中对 SSH 客户端进行单元测试

c++ - 在 Linux 中将 fork() + execlp 与 boost::asio 一起使用时解决重用错误

multithreading - 如何只使用程序可用的带宽

networking - 找到校验和

android sipdroid RTP 数据包类 hasMarker 函数总是返回 false。

c - 为什么箭头键会弄乱标准输出?