child04.c 642 B

123456789101112131415161718192021222324252627282930313233343536
  1. #include "unp.h"
  2. pid_t
  3. child_make(int i, int listenfd, int addrlen)
  4. {
  5. pid_t pid;
  6. void child_main(int, int, int);
  7. if ( (pid = Fork()) > 0)
  8. return(pid); /* parent */
  9. child_main(i, listenfd, addrlen); /* never returns */
  10. }
  11. void
  12. child_main(int i, int listenfd, int addrlen)
  13. {
  14. int connfd;
  15. void web_child(int);
  16. socklen_t clilen;
  17. struct sockaddr *cliaddr;
  18. cliaddr = Malloc(addrlen);
  19. printf("child %ld starting\n", (long) getpid());
  20. for ( ; ; ) {
  21. clilen = addrlen;
  22. my_lock_wait();
  23. connfd = Accept(listenfd, cliaddr, &clilen);
  24. my_lock_release();
  25. web_child(connfd); /* process the request */
  26. Close(connfd);
  27. }
  28. }