繁体   English   中英

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)返回true,而FD_ISSET(fdr, &rfds)返回false?

POSIX标准参考页上select

如果文件描述符fd是fdsetp指向的集合的成员,则FD_ISSET(fd, fdsetp)求值为非零,否则为0。

那么究竟结果怎样 FD_ISSET (这实在不是一个功能,但宏观因此从技术上讲并不“返回”任何东西)没有提到,只是它是零或非零。

要回答您的问题,是的。 如果fd可读,则FD_ISSET(fd, &rfds)将为非零(true),而FD_ISSET(fdr, &rfds)将为零(false)(除非它也是可读的,所以不要使用else ifelse if两者都可能是真正)。

是。 这就是它的目的。 阅读文档。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM