我想为我的系统增加FD_SETSIZE宏值。有什么方法可以增加FD_SETSIZE,因此选择不会失败
按照标准,没有办法增加FD_SETSIZE。一些程序和库(会想到libevent)尝试通过为fd_set对象分配额外的空间并传递比宏更大的值FD_SETSIZE来解决此问题FD_*,但这是一个非常糟糕的主意,因为健壮的实现可能会对参数和如果超出范围,则中止。
FD_SETSIZE
fd_set
FD_*
我有一个始终可以正常工作的替代解决方案(即使标准没有要求)。fd_set分配一个足够大的数组以容纳您所需的最大fd,而不是单个对象,然后使用FD_SET(fd%FD_SETSIZE, &fds_array[fd/FD_SETSIZE])etc.访问该集合。
FD_SET(fd%FD_SETSIZE, &fds_array[fd/FD_SETSIZE])