首页 > 解决方案 > 是否有一种 POSIX 方式来扩展 fd_set?

问题描述

最近的 POSIX 告诉我 anfd_set是一种能够承受FD_SETSIZEfd 的结构。

在 Linux 和 glibc 上我发现FD_SETSIZE是 1024,默认(软)RLIMIT_NOFILE也是 1024,sysconf(_SC_OPEN_MAX)也是 1024。

我可以增加RLIMIT_NOFILE,但我在 POSIX 中找不到任何告诉我如何创建“扩展fd_set”以匹配新的最大 fd 数量的内容。

看起来旧的 POSIX 用于指定fd_set包含一个数组fds_bits,然后将“扩展fd_set”创建为某个倍数sizeof(fds_bits[0])(适当对齐)是安全的。

我发现各种 BSD 允许我设置FD_SETSIZE,前提是足够早地完成。这似乎不适用于 glibc 和 Linux :-(

看来这NFDBIT也许是我需要的——这是 BSD 的东西,glibc 会在__USE_MISC. 还有一种fd_mask类型,其中位向量为fd_mask xxx[xx]

我找不到的是一种 POSIX 方式来做到这一点。我错过了什么吗?

我知道对于成千上万的 fd,我可能应该使用epollor kqueue......但我觉得应该有一种标准的方式来fd_set扩展FD_SETSIZE.

标签: selectposix

解决方案


推荐阅读