gpt4 book ai didi

c - 有没有办法测试 fd_set 是否为 "nonzero"?

转载 作者:太空狗 更新时间:2023-10-29 11:12:15 24 4
gpt4 key购买 nike

是否存在测试条件“是否在 fd_set 中设置了任何位”的现有函数?

如果可能,我想测试是否在 fd_set 中设置了任何位,而不是测试是否设置了特定 fd,使用 FD_ISSET()。我正在尝试按照(伪代码)的方式编写代码:

...
select( max_fd + 1, &readfds, &writefds, NULL, NULL );
if ( FD_ISSET( specific_read_fd, &readfds ) )
{
handleSpecificReadFdSet();
}
else if ( FD_IS_ANY_SET( &readfds ) ) // Desired functionality
{
handleOtherReadFdSet();
}
else if ( FD_ISSET( specific_write_fd, &writefds ) )
{
handleSpecificWriteFdSet();
}
else // if ( FD_IS_ANY_SET( &writefds ) )
{
handleOtherWriteFdSet()
}
...

即为了响应 select() 变得畅通,我想分别处理四种情况:

1)读取的fds中是否设置了特定的fd

2) read fds中是否设置了特定read fd以外的fd

3) 写入的fds中是否设置了特定的fd

4) write fds中是否设置了除特定write fds以外的fd

是否有一个现有的函数可以提供这样一个“这个 fds 集合中有任何 fd 吗?”功能?或者是在循环中使用 FD_ISSET 的唯一方法,例如:

...
bool ret_val = false;
for ( int i = 0; i < max_fd; ++i )
{
if ( i == specific_read_fd ) continue;
if ( FD_ISSET( i, &readfds ) ) { ret_val = true; break; }
}
return ret_val;
...

除了特定的“FD_IS_ANY_SET()”函数之外,我愿意接受解决此问题的替代方案 - 我对 select() 不是很有经验。

最佳答案

以下是您可以测试 fd_set 是否为空的方法:

bool FD_IS_ANY_SET(fd_set const *fdset)
{
static fd_set empty; // initialized to 0 -> empty
return memcmp(fdset, &empty, sizeof(fd_set)) != 0;
}

如果 *fdset 包含至少一个文件描述符,函数 FD_IS_ANY_SET 返回 true,否则返回 false

关于c - 有没有办法测试 fd_set 是否为 "nonzero"?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46779369/

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