UDPtimed.c
上传用户:wei_4586
上传日期:2008-05-28
资源大小:18k
文件大小:1k
源码类别:

网络

开发平台:

Unix_Linux

  1. /* UDPtimed.c - main */
  2. #include <sys/types.h>
  3. #include <sys/socket.h>
  4. #include <netinet/in.h>
  5. #include <stdio.h>
  6. #include <time.h>
  7. #include <string.h>
  8. extern int errno;
  9. int passiveUDP(const char *service);
  10. int errexit(const char *format, ...);
  11. #define UNIXEPOCH 2208988800UL /* UNIX epoch, in UCT secs */
  12. /*------------------------------------------------------------------------
  13.  * main - Iterative UDP server for TIME service
  14.  *------------------------------------------------------------------------
  15.  */
  16. int
  17. main(int argc, char *argv[])
  18. {
  19. struct sockaddr_in fsin; /* the from address of a client */
  20. char *service = "time"; /* service name or port number */
  21. char buf[1]; /* "input" buffer; any size > 0 */
  22. int sock; /* server socket */
  23. time_t now; /* current time */
  24. unsigned int alen; /* from-address length */
  25. switch (argc) {
  26. case 1:
  27. break;
  28. case 2:
  29. service = argv[1];
  30. break;
  31. default:
  32. errexit("usage: UDPtimed [port]n");
  33. }
  34. sock = passiveUDP(service);
  35. while (1) {
  36. alen = sizeof(fsin);
  37. if (recvfrom(sock, buf, sizeof(buf), 0,
  38. (struct sockaddr *)&fsin, &alen) < 0)
  39. errexit("recvfrom: %sn", strerror(errno));
  40. (void) time(&now);
  41. now = htonl((unsigned long)(now + UNIXEPOCH));
  42. (void) sendto(sock, (char *)&now, sizeof(now), 0,
  43. (struct sockaddr *)&fsin, sizeof(fsin));
  44. }
  45. }