有没有一种方法来testingfd_set是否为“非零”?

是否有一个现有的function来testing条件“在fd_set中设置的任何位”?

如果可能的话,我想用FD_ISSET()来testing是否在fd_set中设置了任何位,而不是testing是否设置了特定的 fd。 我试图沿(伪代码)的代码行的代码:

 ... 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)在读取的fds中是否设置了特定的读取fd以外的fd

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

4)是否在写入fds中设置了除特定写入fds以外的任何fd

是否有一个现有的函数提供这样的“是在这个fds集合中的任何fd?” function? 或者是在循环中使用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解决这个问题 – 我对select()没有太多的经验。