child02.c 695 B

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