是否存在测试条件的现有函数"是否在fd_set中设置了任何位"?
如果可能,我想测试是否在fd_set中设置任何位,而不是测试是否设置了特定 fd,{ {1}}。我试图按照(伪代码)编写代码:
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()
}
...
取消阻止,我想要针对四个条件单独处理:
1)是否在读取fds中设置了特定的fd
2)读取fds中是否设置了除特定读取fd以外的任何fd
3)是否在写入fds中设置了特定的fd
4)在写入fds
中是否设置了除特定写入fds之外的任何fd是否存在提供此类"的现有函数是此fds集中的任何fd?"功能?或者是在循环中使用FD_ISSET的唯一方法,例如:
select()
除了特别是" ...
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;
...
&#34;我还可以解决这个问题。功能 - 我对FD_IS_ANY_SET()
没有超级经验。
答案 0 :(得分:2)
以下是测试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
包含至少一个文件描述符,则函数true
返回*fdset
,否则返回false
。