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