我想为我的系统增加 FD_SETSIZE 宏值。有什么办法可以增加 FD_SETSIZE 所以选择不会失败
原文由 Vivek Goel 发布,翻译遵循 CC BY-SA 4.0 许可协议
我想为我的系统增加 FD_SETSIZE 宏值。有什么办法可以增加 FD_SETSIZE 所以选择不会失败
原文由 Vivek Goel 发布,翻译遵循 CC BY-SA 4.0 许可协议
7 回答5.4k 阅读
4 回答4.1k 阅读
2 回答5.9k 阅读✓ 已解决
2 回答2.6k 阅读✓ 已解决
2 回答846 阅读✓ 已解决
1 回答3.3k 阅读
2 回答3.3k 阅读
根据标准,没有办法增加
FD_SETSIZE
。一些程序和库(想到 libevent)尝试通过为fd_set
对象分配额外空间并将大于FD_SETSIZE
的值传递给FD_*
来解决此问题宏,但这是一个非常糟糕的主意,因为健壮的实现可能会对参数执行边界检查,如果超出范围则中止。我有一个应该始终有效的替代解决方案(即使标准没有要求)。而不是单个
fd_set
对象,分配一个足够大的数组以容纳您需要的最大 fd,然后使用FD_SET(fd%FD_SETSIZE, &fds_array[fd/FD_SETSIZE])
等来访问该集合。