是否有一个现有的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()
没有太多的经验。