daytimetcpsrv3.c 951 B

1234567891011121314151617181920212223242526272829303132333435363738394041
  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. struct linger ling;
  10. char buff[MAXLINE];
  11. time_t ticks;
  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: daytimetcpsrv3 [ <host> ] <service or port>");
  18. cliaddr = Malloc(addrlen);
  19. for ( ; ; ) {
  20. len = addrlen;
  21. connfd = Accept(listenfd, cliaddr, &len);
  22. printf("connection from %s\n", Sock_ntop(cliaddr, len));
  23. /* force RST instead of FIN after data */
  24. ling.l_onoff = 1;
  25. ling.l_linger = 0;
  26. Setsockopt(connfd, SOL_SOCKET, SO_LINGER, &ling, sizeof(ling));
  27. ticks = time(NULL);
  28. snprintf(buff, sizeof(buff), "%.24s\r\n", ctime(&ticks));
  29. Write(connfd, buff, strlen(buff));
  30. sleep(2); /* let data get across before RST */
  31. Close(connfd);
  32. }
  33. }