【发布时间】:2012-02-04 05:30:10
【问题描述】:
在 OS X 上,我们发现调用 ::socket(...) 有时会返回大于 FD_SETSIZE 的文件描述符。根据 ::socket(...) 的文档,这是一个成功的请求,因为只有 -1 的返回值表示失败。然而,在我们的整个代码库中——在使用描述符之前——我们正在测试它是否在 0 到 FD_SETSIZE 的范围内。
这是正确的做法,还是我们可以安全地继续使用描述符大于 FD_SETSIZE 的套接字?
发生这种情况的原因是因为我们使用 RLIMIT_NOFILE 标志调用 ::setrlimit(...) 来增加文件描述符的最大数量。我们需要这样做,因为我们的应用程序必须同时打开大量文件。但是,该值是通过使用 KERN_MAXFILESPERPROC 标志调用 sysctl(...) 获得的,并在运行时设置,而 FD_SETSIZE 是编译时设置。
【问题讨论】:
标签: macos sockets file-descriptor