main.lc 2.7 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162
  1. #include "ping.h"## 1 ##src/ping/main.c##
  2. struct proto proto_v4 = { proc_v4, send_v4, NULL, NULL, 0, IPPROTO_ICMP };## 2 ##src/ping/main.c##
  3. #ifdef IPV6## 3 ##src/ping/main.c##
  4. struct proto proto_v6 = { proc_v6, send_v6, NULL, NULL, 0, IPPROTO_ICMPV6 };## 4 ##src/ping/main.c##
  5. #endif## 5 ##src/ping/main.c##
  6. int datalen = 56; /* data that goes with ICMP echo request */## 6 ##src/ping/main.c##
  7. int## 7 ##src/ping/main.c##
  8. main(int argc, char **argv)## 8 ##src/ping/main.c##
  9. {## 9 ##src/ping/main.c##
  10. int c;## 10 ##src/ping/main.c##
  11. struct addrinfo *ai;## 11 ##src/ping/main.c##
  12. opterr = 0; /* don't want getopt() writing to stderr */## 12 ##src/ping/main.c##
  13. while ((c = getopt(argc, argv, "v")) != -1) {## 13 ##src/ping/main.c##
  14. switch (c) {## 14 ##src/ping/main.c##
  15. case 'v':## 15 ##src/ping/main.c##
  16. verbose++;## 16 ##src/ping/main.c##
  17. break;## 17 ##src/ping/main.c##
  18. case '?':## 18 ##src/ping/main.c##
  19. err_quit("unrecognized option: %c", c);## 19 ##src/ping/main.c##
  20. }## 20 ##src/ping/main.c##
  21. }## 21 ##src/ping/main.c##
  22. if (optind != argc - 1)## 22 ##src/ping/main.c##
  23. err_quit("usage: ping [ -v ] <hostname>");## 23 ##src/ping/main.c##
  24. host = argv[optind];## 24 ##src/ping/main.c##
  25. pid = getpid();## 25 ##src/ping/main.c##
  26. Signal(SIGALRM, sig_alrm);## 26 ##src/ping/main.c##
  27. ai = Host_serv(host, NULL, 0, 0);## 27 ##src/ping/main.c##
  28. printf("PING %s (%s): %d data bytes\n", ai->ai_canonname,## 28 ##src/ping/main.c##
  29. Sock_ntop_host(ai->ai_addr, ai->ai_addrlen), datalen);## 29 ##src/ping/main.c##
  30. /* 4initialize according to protocol */## 30 ##src/ping/main.c##
  31. if (ai->ai_family == AF_INET) {## 31 ##src/ping/main.c##
  32. pr = &proto_v4;## 32 ##src/ping/main.c##
  33. #ifdef IPV6## 33 ##src/ping/main.c##
  34. } else if (ai->ai_family == AF_INET6) {## 34 ##src/ping/main.c##
  35. pr = &proto_v6;## 35 ##src/ping/main.c##
  36. if (IN6_IS_ADDR_V4MAPPED(&(((struct sockaddr_in6 *)## 36 ##src/ping/main.c##
  37. ai->ai_addr)->sin6_addr)))## 37 ##src/ping/main.c##
  38. err_quit("cannot ping IPv4-mapped IPv6 address");## 38 ##src/ping/main.c##
  39. #endif## 39 ##src/ping/main.c##
  40. } else## 40 ##src/ping/main.c##
  41. err_quit("unknown address family %d", ai->ai_family);## 41 ##src/ping/main.c##
  42. pr->sasend = ai->ai_addr;## 42 ##src/ping/main.c##
  43. pr->sarecv = Calloc(1, ai->ai_addrlen);## 43 ##src/ping/main.c##
  44. pr->salen = ai->ai_addrlen;## 44 ##src/ping/main.c##
  45. readloop();## 45 ##src/ping/main.c##
  46. exit(0);## 46 ##src/ping/main.c##
  47. }## 47 ##src/ping/main.c##