给出这样的选择调用:
select(fdMax+1, &readFds, NULL, NULL, &timeoutVal)
每当
更新readFds时每当添加新的fd时,我都会更新fdMax
。但是,每当删除现有的fd时,我都想知道if I really need to update the fdMax also
?
如果我的fdMax更高,没有足够的fds可以读取,会有什么不同?
答案 0 :(得分:5)
您可以将fdMax
设置为系统支持的最大文件描述符值(可能由FD_SETSIZE
表示),而不用担心,但可能会导致效率低下。 select
将使用fdMax
值作为其何时可以停止对文件描述符表进行线性扫描的提示。如果你骗到select
,它可能会导致它循环的时间比找到感兴趣的文件描述符所需的时间长得多。
在Linux中,函数max_select_fd
使用fdMax
开始对相关文件描述符进行反向扫描。 LXR
在FreeBSD中,如果kern_select
较大,函数fdMax
会将fdMax
调整为流程的最高打开文件描述符。 FXR 对于纯服务器,这看起来是一个很好的启发式选择,但对于小心地将套接字文件描述符保持在比其他文件描述符更低的值的系统来说可能仍然太大。
答案 1 :(得分:-1)
您可以使用预定义的符号(maxfd)。然后,无论使用多少实际FD,都不必修改该参数。