在OS X上,我们发现对:: socket(...)的调用有时会返回一个大于FD_SETSIZE的文件描述符。根据:: socket(...)的文档,这是一个成功的请求,因为只有返回值-1表示失败。但是,在我们的代码库中 - 在使用描述符之前 - 我们测试它在0到FD_SETSIZE的范围内。
这是正确的做法,还是我们可以安全地继续使用描述符大于FD_SETSIZE的套接字?
发生这种情况的原因是因为我们使用RLIMIT_NOFILE标志调用:: setrlimit(...)来增加文件描述符的最大数量。我们需要这样做,因为我们的应用程序必须同时打开大量文件。但是,此值是通过使用KERN_MAXFILESPERPROC标志调用sysctl(...)并在运行时设置获得的,而FD_SETSIZE是编译时设置。
答案 0 :(得分:1)
您可以使用值大于FD_SETSIZE
的套接字描述符,而不是fd_set
。