2012-02-03 33 views
2

在OS X上,我們發現對:: socket(...)的調用有時可能會返回大於FD_SETSIZE的文件描述符。根據:: socket(...)的文檔,這是一個成功的請求,因爲只有-1的返回值表示失敗。然而,在我們的代碼庫中(在使用描述符之前),我們正在測試它的範圍是0到FD_SETSIZE(含)。套接字文件描述符> FD_SETSIZE在OS X上有效嗎?

這是要做的正確事情,還是可以安全地繼續使用描述符大於FD_SETSIZE的套接字?

發生這種情況的原因是因爲我們使用RLIMIT_NOFILE標誌調用:: setrlimit(...)以調高文件描述符的最大數量。我們需要這樣做,因爲我們的應用程序必須同時打開大量文件。但是,通過使用KERN_MAXFILESPERPROC標誌調用sysctl(...)並在運行時設置此值,而FD_SETSIZE是編譯時設置。

回答

1

您可以使用具有大於FD_SETSIZE的值的套接字描述符,而不是fd_set

相關問題