Я пишу сервер, который должен обрабатывать много открытых сокетов, поэтому я использую setrlimit()
установить максимальное количество дескрипторов открытых файлов (как корень, перед удалением привилегий), так как:Можно ли ожидать, что в Linux, fd <максимальное количество дескрипторов открытых файлов?
#include <sys/resource.h>
#define MAX_FD_C 9001
if (setrlimit(
RLIMIT_NOFILE, &(struct rlimit){.rlim_cur = MAX_FD_C, .rlim_max = MAX_FD_C}
) == -1) {
perror("Failed to set the maximum number of open file descriptors");
return EXIT_FAILURE;
}
Теперь я осознать, что, вероятно, не будет никаких гарантий и что я нахожусь во власти любого метода, используемого ядром Linux для реализации таблиц дескрипторов файлов; но на практике разумно ли предположить, что любая fd, полученная этой программой от ядра Linux, будет иметь значение меньше MAX_FD_C, которое я установил выше?
Я хотел бы сохранить данные в сокете настолько компактными, насколько это возможно, что может означать просто использование массива типа static struct client clients[MAX_FD_C] = {{0}};
и использование fd в качестве индекса для клиентской структуры (которая будет в основном моей версией FDT).
Да, дескрипторы файлов будут находиться в диапазоне 0 <= fd
Не предполагайте ничего при программировании. Это заставляет вас жить дольше. Шутки в сторону. –
@ RandyHoward: Я думаю, что предположения необходимы, чтобы поддерживать нас здоровыми и эффективными. –