增加FD_SETSIZE

5
我需要将FD_SETSIZE值从1024增加到4096。我知道使用poll()/epoll()会更好,但我想了解它们的优缺点。主要问题是:我需要重新编译glibc吗?我读过几篇文章,在更改FD_SETSIZE后更改.h文件可以只重新编译用户应用程序。阅读glibc代码(以及内核),实际上似乎如果我想使用select()、FD_*宏等,则必须重新编译所有内容,因为fd_set的大小已更改。此时,我不仅需要重新编译我的应用程序,还需要重新编译所有内容,因为如果系统中有另一个常见的应用程序使用select和friends,我可能会遇到问题。我是对的吗?

可能是增加FD_SETSIZE和select的限制的重复问题。 - mpromonet
1个回答

2
从技术上讲,您不必重新编译glibc。只需使用自己版本的<sys/select.h>,其中包含更大的fd_set_t,但与原版兼容即可。它会自动运行,因为select函数接收最大文件描述符(加一),所以它可以计算出集合大小。其他函数和宏要么是内联的,要么不关心实际集合大小。
尽管如此,这仍然是一个不好的主意,因此您真的应该使用pollepoll
过去,一些libcs支持在包括<sys/select.h>之前定义FD_SETSIZE以获得更大的集合大小,但我认为对此的支持从未成为主流glibc的一部分。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接