sock_ntop_host.c 1.6 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374
  1. #include "unp.h"
  2. #ifdef HAVE_SOCKADDR_DL_STRUCT
  3. #include <net/if_dl.h>
  4. #endif
  5. char *
  6. sock_ntop_host(const struct sockaddr *sa, socklen_t salen)
  7. {
  8. static char str[128]; /* Unix domain is largest */
  9. switch (sa->sa_family) {
  10. case AF_INET: {
  11. struct sockaddr_in *sin = (struct sockaddr_in *) sa;
  12. if (inet_ntop(AF_INET, &sin->sin_addr, str, sizeof(str)) == NULL)
  13. return(NULL);
  14. return(str);
  15. }
  16. #ifdef IPV6
  17. case AF_INET6: {
  18. struct sockaddr_in6 *sin6 = (struct sockaddr_in6 *) sa;
  19. if (inet_ntop(AF_INET6, &sin6->sin6_addr, str, sizeof(str)) == NULL)
  20. return(NULL);
  21. return(str);
  22. }
  23. #endif
  24. #ifdef AF_UNIX
  25. case AF_UNIX: {
  26. struct sockaddr_un *unp = (struct sockaddr_un *) sa;
  27. /* OK to have no pathname bound to the socket: happens on
  28. every connect() unless client calls bind() first. */
  29. if (unp->sun_path[0] == 0)
  30. strcpy(str, "(no pathname bound)");
  31. else
  32. snprintf(str, sizeof(str), "%s", unp->sun_path);
  33. return(str);
  34. }
  35. #endif
  36. #ifdef HAVE_SOCKADDR_DL_STRUCT
  37. case AF_LINK: {
  38. struct sockaddr_dl *sdl = (struct sockaddr_dl *) sa;
  39. if (sdl->sdl_nlen > 0)
  40. snprintf(str, sizeof(str), "%*s",
  41. sdl->sdl_nlen, &sdl->sdl_data[0]);
  42. else
  43. snprintf(str, sizeof(str), "AF_LINK, index=%d", sdl->sdl_index);
  44. return(str);
  45. }
  46. #endif
  47. default:
  48. snprintf(str, sizeof(str), "sock_ntop_host: unknown AF_xxx: %d, len %d",
  49. sa->sa_family, salen);
  50. return(str);
  51. }
  52. return (NULL);
  53. }
  54. char *
  55. Sock_ntop_host(const struct sockaddr *sa, socklen_t salen)
  56. {
  57. char *ptr;
  58. if ( (ptr = sock_ntop_host(sa, salen)) == NULL)
  59. err_sys("sock_ntop_host error"); /* inet_ntop() sets errno */
  60. return(ptr);
  61. }