#include "unp.h" pid_t child_make(int i, int listenfd, int addrlen) { pid_t pid; void child_main(int, int, int); if ( (pid = Fork()) > 0) return(pid); /* parent */ child_main(i, listenfd, addrlen); /* never returns */ } void child_main(int i, int listenfd, int addrlen) { int connfd; void web_child(int); fd_set rset; socklen_t clilen; struct sockaddr *cliaddr; cliaddr = Malloc(addrlen); printf("child %ld starting\n", (long) getpid()); FD_ZERO(&rset); for ( ; ; ) { FD_SET(listenfd, &rset); Select(listenfd+1, &rset, NULL, NULL, NULL); if (FD_ISSET(listenfd, &rset) == 0) err_quit("listenfd readable"); clilen = addrlen; connfd = Accept(listenfd, cliaddr, &clilen); web_child(connfd); /* process the request */ Close(connfd); } }