我在C上的UNIX上编写程序,我必须在套接字上编写客户端 - 服务器(TCP)程序。客户端发送一些信息和服务器答案。不管客户端发送或接收的是什么,因为我成功地为它写了代码。但是任务的最后部分对我来说非常困难。进程的动态池C
1)一个连接 - 一个子进程。
2)对于使用运行前处理从池中的新连接。
3)池的大小是dinamic.If(不服务客户)免费进程的数量大于N变得不那么 - 应创建新的进程,如果它于K变得更加 - “额外”的进程必须被终止。
这是我的代码。每个连接都使用fork()
进行新的子进程。每个连接都以新进程运行。但是如何制作我上面所说的动态池呢?
请帮忙,这非常重要!这是我应该做的最后一件事。
服务器代码:
int main(int argc, char * argv[])
{
int cfd;
int listener = socket(AF_INET, SOCK_STREAM, 0); //create listiner 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);
}
return 0;
}
所以,你需要父和池中的孩子之间的某种IPC。你有什么指导什么IPC机制使用? 'socketpair'也许? – hyde 2013-04-28 20:57:15
我昨天读过这本书,意在回到它。这比普通的学生项目要复杂一些。 – Duck 2013-04-29 20:20:38