gn_ipv46.lc 2.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051
  1. #include "gai_hdr.h"## 1 ##src/libgai/gn_ipv46.c##
  2. /*## 2 ##src/libgai/gn_ipv46.c##
  3. * Handle either an IPv4 or an IPv6 address and port.## 3 ##src/libgai/gn_ipv46.c##
  4. */## 4 ##src/libgai/gn_ipv46.c##
  5. /* include gn_ipv46 */
  6. int## 5 ##src/libgai/gn_ipv46.c##
  7. gn_ipv46(char *host, size_t hostlen, char *serv, size_t servlen,## 6 ##src/libgai/gn_ipv46.c##
  8. void *aptr, size_t alen, int family, int port, int flags)## 7 ##src/libgai/gn_ipv46.c##
  9. {## 8 ##src/libgai/gn_ipv46.c##
  10. char *ptr;## 9 ##src/libgai/gn_ipv46.c##
  11. struct hostent *hptr;## 10 ##src/libgai/gn_ipv46.c##
  12. struct servent *sptr;## 11 ##src/libgai/gn_ipv46.c##
  13. if (hostlen > 0) {## 12 ##src/libgai/gn_ipv46.c##
  14. if (flags & NI_NUMERICHOST) {## 13 ##src/libgai/gn_ipv46.c##
  15. if (inet_ntop(family, aptr, host, hostlen) == NULL)## 14 ##src/libgai/gn_ipv46.c##
  16. return (1);## 15 ##src/libgai/gn_ipv46.c##
  17. } else {## 16 ##src/libgai/gn_ipv46.c##
  18. hptr = gethostbyaddr(aptr, alen, family);## 17 ##src/libgai/gn_ipv46.c##
  19. if (hptr != NULL && hptr->h_name != NULL) {## 18 ##src/libgai/gn_ipv46.c##
  20. if (flags & NI_NOFQDN) {## 19 ##src/libgai/gn_ipv46.c##
  21. if ((ptr = strchr(hptr->h_name, '.')) != NULL)## 20 ##src/libgai/gn_ipv46.c##
  22. *ptr = 0; /* overwrite first dot */## 21 ##src/libgai/gn_ipv46.c##
  23. }## 22 ##src/libgai/gn_ipv46.c##
  24. snprintf(host, hostlen, "%s", hptr->h_name);## 23 ##src/libgai/gn_ipv46.c##
  25. } else {## 24 ##src/libgai/gn_ipv46.c##
  26. if (flags & NI_NAMEREQD)## 25 ##src/libgai/gn_ipv46.c##
  27. return (1);## 26 ##src/libgai/gn_ipv46.c##
  28. if (inet_ntop(family, aptr, host, hostlen) == NULL)## 27 ##src/libgai/gn_ipv46.c##
  29. return (1);## 28 ##src/libgai/gn_ipv46.c##
  30. }## 29 ##src/libgai/gn_ipv46.c##
  31. }## 30 ##src/libgai/gn_ipv46.c##
  32. }## 31 ##src/libgai/gn_ipv46.c##
  33. if (servlen > 0) {## 32 ##src/libgai/gn_ipv46.c##
  34. if (flags & NI_NUMERICSERV) {## 33 ##src/libgai/gn_ipv46.c##
  35. snprintf(serv, servlen, "%d", ntohs(port));## 34 ##src/libgai/gn_ipv46.c##
  36. } else {## 35 ##src/libgai/gn_ipv46.c##
  37. sptr = getservbyport(port, (flags & NI_DGRAM) ? "udp" : NULL);## 36 ##src/libgai/gn_ipv46.c##
  38. if (sptr != NULL && sptr->s_name != NULL)## 37 ##src/libgai/gn_ipv46.c##
  39. snprintf(serv, servlen, "%s", sptr->s_name);## 38 ##src/libgai/gn_ipv46.c##
  40. else## 39 ##src/libgai/gn_ipv46.c##
  41. snprintf(serv, servlen, "%d", ntohs(port));## 40 ##src/libgai/gn_ipv46.c##
  42. }## 41 ##src/libgai/gn_ipv46.c##
  43. }## 42 ##src/libgai/gn_ipv46.c##
  44. return (0);## 43 ##src/libgai/gn_ipv46.c##
  45. }## 44 ##src/libgai/gn_ipv46.c##
  46. /* end gn_ipv46 */