FD_ISSET()是否返回接收到数据的文件描述符?
Does FD_ISSET() return the file descriptor which received data
我有以下代码
fd = listen_socket(INADDR_ANY, CLIENT_PORT, client_config.interface);
fdr = raw_socket(client_config.ifindex);
if (fd >= 0) FD_SET(fd, &rfds);
if (fdr >= 0) FD_SET(fdr, &rfds);
max_fd = fd > fdr ? fd : fdr;
retval = select(max_fd + 1, &rfds, NULL, NULL, &tv);
if (FD_ISSET(fd, &rfds)) {
....
} else if (FD_ISSET(fdr, &rfds)) {
....
}
如果我们从fd
套接字接收数据,FD_ISSET(fd, &rfds)
返回真,FD_ISSET(fdr, &rfds)
返回假吗?
来自select
的POSIX标准参考页:
如果文件描述符fd是fdsetp所指向的集合的成员,
FD_ISSET(fd, fdsetp)
的求值为非零,否则求值为零。
所以确切的 FD_ISSET
的结果(这实际上不是一个函数,而是一个宏,所以技术上它不"返回"任何东西)没有提到,只是它要么是零,要么是非零。
回答你的问题,是的。如果fd
是可读的,那么FD_ISSET(fd, &rfds)
将是非零(true), FD_ISSET(fdr, &rfds)
将为零(false)(除非也是可读,所以不要在那里使用else if
,两者都可能是true)。
是。这就是它的目的。阅读文档
相关文章:
- C++数据文件、数组和计算赋值
- 数据文件的第二行未正确读取
- 在 C++/C 中使用 CURL 发出带有数据文件的 GET HTTP 请求
- 将数据文件读入结构 C++
- 引入流时C++数据文件未正确读取?
- 如何在数据文件中查找和显示内容
- 如何处理错误"E1696命令行错误:无法在Visual Studio 2017中打开元数据文件"mscorlib.dll"?
- 尝试读取数据文件,存储在数组中并打印所有元素,但它不起作用
- 将数据文件读入对象数组时出现问题
- C :数据文件有错误:预期的无限制ID
- C 和 C++:带有错误"Expected unqualified-id"的数据文件
- 如何在C 中读取一系列数据文件
- 从数据文件中读取每2个字节,并在向量中进行比较
- 写入单个大数据文件或多个小文件:哪个更快?
- 在读取数据文件时,如何找到用户字符串输入的字谜?
- 保护外部数据文件免受未经授权的修改
- C 读取数据文件
- C 如何将数据文件读取到结构或向量以及返回结构或向量
- 具有挑战性的数据文件格式,需要将其读取为包含类对象的数组的VAR
- C 中的Google单元测试:如何编写持久数据文件