udpcli01.c 843 B

123456789101112131415161718192021222324252627282930313233343536373839
  1. #include "unp.h"
  2. int
  3. main(int argc, char **argv)
  4. {
  5. int c, sockfd, len = 0;
  6. u_char *ptr = NULL;
  7. void *rth;
  8. struct addrinfo *ai;
  9. if (argc < 2)
  10. err_quit("usage: udpcli01 [ <hostname> ... ] <hostname>");
  11. if (argc > 2) {
  12. int i;
  13. len = Inet6_rth_space(IPV6_RTHDR_TYPE_0, argc-2);
  14. ptr = Malloc(len);
  15. Inet6_rth_init(ptr, len, IPV6_RTHDR_TYPE_0, argc-2);
  16. for (i = 1; i < argc-1; i++) {
  17. ai = Host_serv(argv[i], NULL, AF_INET6, 0);
  18. Inet6_rth_add(ptr, &((struct sockaddr_in6 *)ai->ai_addr)->sin6_addr);
  19. }
  20. }
  21. ai = Host_serv(argv[argc-1], SERV_PORT_STR, AF_INET6, SOCK_DGRAM);
  22. sockfd = Socket(ai->ai_family, ai->ai_socktype, ai->ai_protocol);
  23. if (ptr) {
  24. Setsockopt(sockfd, IPPROTO_IPV6, IPV6_RTHDR, ptr, len);
  25. free(ptr);
  26. }
  27. dg_cli(stdin, sockfd, ai->ai_addr, ai->ai_addrlen); /* do it all */
  28. exit(0);
  29. }