サーバが作成するプロセスの数を制限する
L あらかじめ設定された数だけプロセスを作成する
#include "TCPEchoServer.h" /* ヘッダーファイルをインクルード */
void ProcessMain(int servSock); /* プロセスのメインプログラム */
int main(int argc, char *argv[]) {
int servSock;
unsigned short echoServPort;
pit_t processID;
unsigned int processLimit;
unsigned int processCt;
if (argc != 3) {
fprintf(stderr, "Usage: %s <Server Port> <FORK LIMIT>\n", argv[0]);
exit(1);
}
echoServPort = atoi(argv[1]);
processLimit = atoi(argv[2]);
servSock = CreateTCPServerSocket(echoServPort);
for(processCt=0; processCt < processLimit; processCt++)
if((processID == fork()) < 0)
DieWithError("fork() failed");
else if(processID == 0)
ProcessMain(servSock);
exit(0);
}
void ProcessMain(int servSock) {
int clntSock;
for(;;) /* 処理を繰り返し実行 */
{
clntSock = AcceptTCPConnection(servSock);
printf("with child process: %d\n", (unsigned int) getpid());
HandleTCPClient(clntSock);
}
}
指定されたプロセスしか生成しないため、スケジューリングによるオーバーヘッドを削減できる。