ので、私は多くのオープンソケットを処理する必要があるサーバーを書いているので、私は(権限を削除する前に、rootとして)オープンファイル記述子の最大数を設定する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カーネルがファイル記述子テーブルを実装するためにどのようなメソッドを使用していても、私はそれが保証されていないことを認識しています。実際には、このプログラムがLinuxカーネルから受け取るfdが上記のMAX_FD_Cより小さい値を持つと仮定することは合理的ですか?
ソケットデータをできるだけコンパクトに保ちたいのですが、単純にstatic struct client clients[MAX_FD_C] = {{0}};
のような配列を使用し、fdをクライアント構造体のインデックス(基本的にはFDTの独自のバージョン)とすることができます。
はい、ファイル記述子は0 <= fd
プログラミング中は何も想定しないでください。それはあなたが長く生きるようにします。真剣に。 –
@RandyHoward:われわれは、われわれを正気で効率的に保つためには前提が必要だと思う。 –