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是編譯時設置。