我需要将FD_SETSIZE值从1024
增加到4096
。我知道使用poll()/epoll()
会更好,但我想了解什么是利弊。主要问题是:我要重新编译glibc
吗?我读了几个线程,其中更改FD_SETSIZE
后.h的更改只能重新编译用户应用程序。读取glibc
代码(以及内核),实际上在我看来,如果我想使用select(),FD_ *宏等等,我必须重新编译所有因为{{1}的大小}改变了。此时我不得不重新编译 all 不仅仅是我的应用程序,因为如果在系统中有另一个使用select和friends的“常用”应用程序,我可能会遇到问题。我对吗?
答案 0 :(得分:0)
从技术上讲,您不必重新编译glibc。使用您自己的<sys/select.h>
版本(具有更大的fd_set_t
,但在其他方面兼容)就足够了。这将神奇地起作用,因为select
函数接收最大的文件描述符(加一个),因此它可以计算出设置的大小。其他函数和宏是内联的,或不在乎实际的设置大小。
这仍然不是一个好主意,因此您实际上应该使用poll
或epoll
。
过去,某些libc支持在包含FD_SETSIZE
之前定义<sys/select.h>
以获得更大的集合大小,但我认为对此的支持不是主线glibc的一部分。