我需要将 FD_SETSIZE 值从1024
增加到4096
。我知道使用它会更好,poll()/epoll()
但我想了解什么是优点/缺点。主要问题是:我必须重新编译glibc
吗?我阅读了几个线程,其中更改后.h 的更改FD_SETSIZE
仅重新编译用户应用程序。阅读glibc
代码(以及内核),实际上在我看来,如果我想使用 select()、FD_* 宏等,我必须重新编译所有内容,因为大小fd_set
已更改。在这一点上,我不仅要重新编译我的应用程序,因为如果系统中有另一个使用 select 和 Friends 的“通用”应用程序,我可能会遇到问题。我对吗?
问问题
1367 次
1 回答
2
从技术上讲,您不必重新编译 glibc。使用你自己的版本就足够了,<sys/select.h>
它有一个更大的fd_set_t
,但在其他方面是兼容的。它将神奇地工作,因为该select
函数接收最大的文件描述符(加一),因此它可以计算出设置的大小。其他函数和宏要么是内联的,要么不关心实际的集合大小。
这仍然是一个坏主意,所以你真的应该使用poll
orepoll
代替。
过去,一些 libcs 支持FD_SETSIZE
在包含之前定义<sys/select.h>
以获得更大的集合大小,但我不认为对这一点的支持曾经是主线 glibc 的一部分。
于 2020-09-15T18:00:34.497 回答