serv09.c 808 B

12345678910111213141516171819202122232425262728293031323334353637383940414243
  1. /* include serv09 */
  2. #include "unpthread.h"
  3. #include "pthread09.h"
  4. int
  5. main(int argc, char **argv)
  6. {
  7. int i;
  8. void sig_int(int), thread_make(int);
  9. if (argc == 3)
  10. listenfd = Tcp_listen(NULL, argv[1], &addrlen);
  11. else if (argc == 4)
  12. listenfd = Tcp_listen(argv[1], argv[2], &addrlen);
  13. else
  14. err_quit("usage: serv09 [ <host> ] <port#> <#threads>");
  15. nthreads = atoi(argv[argc-1]);
  16. tptr = Calloc(nthreads, sizeof(Thread));
  17. for (i = 0; i < nthreads; i++)
  18. thread_make(i); /* only main thread returns */
  19. Signal(SIGINT, sig_int);
  20. for ( ; ; )
  21. pause(); /* everything done by threads */
  22. }
  23. /* end serv09 */
  24. void
  25. sig_int(int signo)
  26. {
  27. int i;
  28. void pr_cpu_time(void);
  29. pr_cpu_time();
  30. for (i = 0; i < nthreads; i++)
  31. printf("thread %d, %ld connections\n", i, tptr[i].thread_count);
  32. exit(0);
  33. }