main.c 1021 B

1234567891011121314151617181920212223242526272829303132333435363738394041424344
  1. #include "sntp.h"
  2. int
  3. main(int argc, char **argv)
  4. {
  5. int sockfd;
  6. char buf[MAXLINE];
  7. ssize_t n;
  8. socklen_t salen, len;
  9. struct ifi_info *ifi;
  10. struct sockaddr *mcastsa, *wild, *from;
  11. struct timeval now;
  12. if (argc != 2)
  13. err_quit("usage: ssntp <IPaddress>");
  14. sockfd = Udp_client(argv[1], "ntp", (void **) &mcastsa, &salen);
  15. wild = Malloc(salen);
  16. memcpy(wild, mcastsa, salen); /* copy family and port */
  17. sock_set_wild(wild, salen);
  18. Bind(sockfd, wild, salen); /* bind wildcard */
  19. #ifdef MCAST
  20. /* 4obtain interface list and process each one */
  21. for (ifi = Get_ifi_info(mcastsa->sa_family, 1); ifi != NULL;
  22. ifi = ifi->ifi_next) {
  23. if (ifi->ifi_flags & IFF_MULTICAST) {
  24. Mcast_join(sockfd, mcastsa, salen, ifi->ifi_name, 0);
  25. printf("joined %s on %s\n",
  26. Sock_ntop(mcastsa, salen), ifi->ifi_name);
  27. }
  28. }
  29. #endif
  30. from = Malloc(salen);
  31. for ( ; ; ) {
  32. len = salen;
  33. n = Recvfrom(sockfd, buf, sizeof(buf), 0, from, &len);
  34. Gettimeofday(&now, NULL);
  35. sntp_proc(buf, n, &now);
  36. }
  37. }