getnameinfo.c 979 B

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748
  1. #include "gai_hdr.h"
  2. /* include getnameinfo */
  3. int
  4. getnameinfo(const struct sockaddr *sa, socklen_t salen,
  5. char *host, size_t hostlen,
  6. char *serv, size_t servlen, int flags)
  7. {
  8. switch (sa->sa_family) {
  9. #ifdef IPv4
  10. case AF_INET: {
  11. struct sockaddr_in *sain = (struct sockaddr_in *) sa;
  12. return(gn_ipv46(host, hostlen, serv, servlen,
  13. &sain->sin_addr, sizeof(struct in_addr),
  14. AF_INET, sain->sin_port, flags));
  15. }
  16. #endif
  17. #ifdef IPv6
  18. case AF_INET6: {
  19. struct sockaddr_in6 *sain = (struct sockaddr_in6 *) sa;
  20. return(gn_ipv46(host, hostlen, serv, servlen,
  21. &sain->sin6_addr, sizeof(struct in6_addr),
  22. AF_INET6, sain->sin6_port, flags));
  23. }
  24. #endif
  25. #ifdef UNIXdomain
  26. case AF_LOCAL: {
  27. struct sockaddr_un *un = (struct sockaddr_un *) sa;
  28. if (hostlen > 0)
  29. snprintf(host, hostlen, "%s", "/local");
  30. if (servlen > 0)
  31. snprintf(serv, servlen, "%s", un->sun_path);
  32. return(0);
  33. }
  34. #endif
  35. default:
  36. return(1);
  37. }
  38. }
  39. /* end getnameinfo */