我在Unix系統上用C編寫客戶端 - 服務器(TCP)程序。客戶端發送一些信息和服務器的答案。每個子進程只有一個連接。新的連接使用池中的預運行進程,並且池的大小是動態的,所以如果空閒進程的數量(不爲客戶端服務的進程)下降得太低,它應該創建新的進程,同樣如果額外的過高流程應該終止。進程的動態池
這是我的服務器代碼。每個連接使用fork()
進行新的子進程。每個連接都在一個新的進程中運行。我如何製作像上面解釋過的動態泳池?
int main(int argc, char * argv[])
{
int cfd;
int listener = socket(AF_INET, SOCK_STREAM, 0); //create listener socket
if(listener < 0){
perror("socket error");
return 1;
}
struct sockaddr_in addr;
addr.sin_family = AF_INET;
addr.sin_port = htons(PORT);
addr.sin_addr.s_addr = htonl(INADDR_ANY);
int binding = bind(listener, (struct sockaddr *)&addr, sizeof(addr));
if(binding < 0){
perror("binding error");
return 1;
}
listen(listener, 1); //listen for new clients
signal(SIGCHLD,handler);
int pid;
for(;;) // infinity loop on server
{
cfd = accept(listener, NULL, NULL); //client socket descriptor
pid = fork(); //make child proc
if(pid == 0) //in child proc...
{
close(listener); //close listener socket descriptor
... //some server actions that I do.(receive or send)
close(cfd); // close client fd
return 0;
}
close(cfd);
}