增加 FD_SETSIZE 的限制并选择

新手上路,请多包涵

我想为我的系统增加 FD_SETSIZE 宏值。有什么办法可以增加 FD_SETSIZE 所以选择不会失败

原文由 Vivek Goel 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 1.4k
2 个回答

根据标准,没有办法增加 FD_SETSIZE 。一些程序和库(想到 libevent)尝试通过为 fd_set 对象分配额外空间并将大于 FD_SETSIZE 的值传递给 FD_* 来解决此问题宏,但这是一个非常糟糕的主意,因为健壮的实现可能会对参数执行边界检查,如果超出范围则中止。

我有一个应该始终有效的替代解决方案(即使标准没有要求)。而不是单个 fd_set 对象,分配一个足够大的数组以容纳您需要的最大 fd,然后使用 FD_SET(fd%FD_SETSIZE, &fds_array[fd/FD_SETSIZE]) 等来访问该集合。

原文由 R.. GitHub STOP HELPING ICE 发布,翻译遵循 CC BY-SA 3.0 许可协议

如果可能的话,我还建议使用 poll 。并且存在几个“事件”处理库,如 libeventlibev (或来自 GTK 的 GlibQtCore 等的事件能力),它们应该可以帮助您。还有像 epoll 这样的东西。你的问题与 C10k 有关

原文由 Basile Starynkevitch 发布,翻译遵循 CC BY-SA 3.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题