serv06.c 855 B

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152
  1. /* include serv06 */
  2. #include "unpthread.h"
  3. int
  4. main(int argc, char **argv)
  5. {
  6. int listenfd, connfd;
  7. void sig_int(int);
  8. void *doit(void *);
  9. pthread_t tid;
  10. socklen_t clilen, addrlen;
  11. struct sockaddr *cliaddr;
  12. if (argc == 2)
  13. listenfd = Tcp_listen(NULL, argv[1], &addrlen);
  14. else if (argc == 3)
  15. listenfd = Tcp_listen(argv[1], argv[2], &addrlen);
  16. else
  17. err_quit("usage: serv06 [ <host> ] <port#>");
  18. cliaddr = Malloc(addrlen);
  19. Signal(SIGINT, sig_int);
  20. for ( ; ; ) {
  21. clilen = addrlen;
  22. connfd = Accept(listenfd, cliaddr, &clilen);
  23. Pthread_create(&tid, NULL, &doit, (void *) connfd);
  24. }
  25. }
  26. void *
  27. doit(void *arg)
  28. {
  29. void web_child(int);
  30. Pthread_detach(pthread_self());
  31. web_child((int) arg);
  32. Close((int) arg);
  33. return(NULL);
  34. }
  35. /* end serv06 */
  36. void
  37. sig_int(int signo)
  38. {
  39. void pr_cpu_time(void);
  40. pr_cpu_time();
  41. exit(0);
  42. }