Ich schreibe einen Server, der viele offene Steckdosen verarbeiten muss, so dass ich setrlimit()
die maximale Anzahl offener Dateien setzen (als root, vor dem Ablegen Privilegien) wie folgt:Ist es vernünftig zu erwarten, dass in Linux, fd <maximale Anzahl von offenen Dateideskriptoren?
#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;
}
Nun, ich realisiere, dass es wahrscheinlich keine Garantien gibt und dass ich der Methode ausgeliefert bin, mit der der Linux-Kernel Dateideskriptortabellen implementiert; Aber ist es in der Praxis vernünftig anzunehmen, dass jedes fd, das dieses Programm vom Linux-Kernel erhält, einen Wert hat, der kleiner ist als das oben angegebene MAX_FD_C?
Ich möchte pro Socket Daten so kompakt wie möglich halten, was einfach bedeuten könnte, ein Array wie static struct client clients[MAX_FD_C] = {{0}};
und die Verwendung der Fd als Index für die Client-Struktur (die im Grunde meine eigene Version der FDT wäre).
Ja, Dateideskriptoren liegen im Bereich 0 <= fd
Nimm während der Programmierung nichts an. Es lässt dich länger leben. Ernst. –
@RandyHoward: Ich denke, Annahmen sind notwendig, um uns gesund und effizient zu halten. –