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

Is there a way to test if a fd_set is "nonzero"?

是否存在测试条件的函数"are any bits set in a fd_set"?

如果可能的话,我想测试 any 位是否设置在 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

是否有提供这种 "is any fd in this fds set?" 功能的现有函数?或者是在循环中使用 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;
}

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