5

我需要将 FD_SETSIZE 值从1024增加到4096。我知道使用它会更好,poll()/epoll()但我想了解什么是优点/缺点。主要问题是:我必须重新编译glibc吗?我阅读了几个线程,其中更改后.h 的更改FD_SETSIZE仅重新编译用户应用程序。阅读glibc代码(以及内核),实际上在我看来,如果我想使用 select()、FD_* 宏等,我必须重新编译所有内容,因为大小fd_set已更改。在这一点上,我不仅要重新编译的应用程序,因为如果系统中有另一个使用 select 和 Friends 的“通用”应用程序,我可能会遇到问题。我对吗?

4

1 回答 1

2

从技术上讲,您不必重新编译 glibc。使用你自己的版本就足够了,<sys/select.h>它有一个更大的fd_set_t,但在其他方面是兼容的。它将神奇地工作,因为该select函数接收最大的文件描述符(加一),因此它可以计算出设置的大小。其他函数和宏要么是内联的,要么不关心实际的集合大小。

这仍然是一个坏主意,所以你真的应该使用pollorepoll代替。

过去,一些 libcs​​ 支持FD_SETSIZE在包含之前定义<sys/select.h>以获得更大的集合大小,但我不认为对这一点的支持曾经是主线 glibc 的一部分。

于 2020-09-15T18:00:34.497 回答