daytimetcpsrv4.c 868 B

123456789101112131415161718192021222324252627282930313233343536
  1. #include "unp.h"
  2. #include <time.h>
  3. int
  4. main(int argc, char **argv)
  5. {
  6. int listenfd, connfd;
  7. socklen_t addrlen, len;
  8. struct sockaddr *cliaddr;
  9. char buff[MAXLINE], host[NI_MAXHOST], serv[NI_MAXSERV];
  10. time_t ticks;
  11. if (argc == 2)
  12. listenfd = Tcp_listen(NULL, argv[1], &addrlen);
  13. else if (argc == 3)
  14. listenfd = Tcp_listen(argv[1], argv[2], &addrlen);
  15. else
  16. err_quit("usage: daytimetcpsrv4 [ <host> ] <service or port>");
  17. cliaddr = Malloc(addrlen);
  18. for ( ; ; ) {
  19. len = addrlen;
  20. connfd = Accept(listenfd, cliaddr, &len);
  21. if (getnameinfo(cliaddr, len, host, NI_MAXHOST, serv, NI_MAXSERV,
  22. NI_NUMERICHOST | NI_NUMERICSERV) == 0)
  23. printf("connection from %s.%s\n", host, serv);
  24. ticks = time(NULL);
  25. snprintf(buff, sizeof(buff), "%.24s\r\n", ctime(&ticks));
  26. Write(connfd, buff, strlen(buff));
  27. Close(connfd);
  28. }
  29. }