【问题标题】:Are socket file descriptors > FD_SETSIZE valid on OS X?套接字文件描述符 > FD_SETSIZE 在 OS X 上有效吗?
【发布时间】: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


    【解决方案1】:

    您可以使用值大于FD_SETSIZE 的套接字描述符,但不能使用fd_set

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2014-04-17
      • 2011-01-04
      • 2015-08-11
      • 1970-01-01
      • 2012-11-02
      • 1970-01-01
      相关资源
      最近更新 更多