增加FD_SETSIZE

时间:2012-09-30 15:32:24

标签: select glibc

我需要将FD_SETSIZE值从1024增加到4096。我知道使用poll()/epoll()会更好,但我想了解什么是利弊。主要问题是:我要重新编译glibc吗?我读了几个线程,其中更改FD_SETSIZE后.h的更改只能重新编译用户应用程序。读取glibc代码(以及内核),实际上在我看来,如果我想使用select(),FD_ *宏等等,我必须重新编译所有因为{{1}的大小}改变了。此时我不得不重新编译 all 不仅仅是我的应用程序,因为如果在系统中有另一个使用select和friends的“常用”应用程序,我可能会遇到问题。我对吗?

1 个答案:

答案 0 :(得分:0)

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

这仍然不是一个好主意,因此您实际上应该使用pollepoll

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