child03m.c 676 B

1234567891011121314151617181920212223242526272829303132333435363738
  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. extern long *cptr;
  19. cliaddr = Malloc(addrlen);
  20. printf("child %ld starting\n", (long) getpid());
  21. for ( ; ; ) {
  22. clilen = addrlen;
  23. my_lock_wait();
  24. connfd = Accept(listenfd, cliaddr, &clilen);
  25. my_lock_release();
  26. cptr[i]++;
  27. web_child(connfd); /* process the request */
  28. Close(connfd);
  29. }
  30. }