1. 多进程服务模型
void sig_handler(int signo)
{
pid_t pid;
int stat;
if (signo == SIGCHLD)
while ((pid = waitpid(-1, &stat, WNOHANG)) > 0);
return;
}
void handler(int sd)
{
...
}
int main()
{
int servfd, clifd;
...
signal(SIGCHLD, sig_handler);
...
servfd = tcp_server();
while (1)
{
clifd = tcp_accept(servfd, cliip);
if (clifd == -1)
{
printf("call tcp_accept() failed\n");
goto exit;
}
pid = fork();
if (pid == 0) // child process
{
close(servfd);
handler(clifd);
exit(0);
}
else
{
close(clifd);
continue;
}
} //end of while()
exit:
if (servfd != -1)
close(servfd);
return 0;
}