sock_cmp_addr.c 889 B

1234567891011121314151617181920212223242526272829303132333435363738394041424344
  1. #include "unp.h"
  2. #ifdef HAVE_SOCKADDR_DL_STRUCT
  3. #include <net/if_dl.h>
  4. #endif
  5. int
  6. sock_cmp_addr(const struct sockaddr *sa1, const struct sockaddr *sa2,
  7. socklen_t salen)
  8. {
  9. if (sa1->sa_family != sa2->sa_family)
  10. return(-1);
  11. switch (sa1->sa_family) {
  12. case AF_INET: {
  13. return(memcmp( &((struct sockaddr_in *) sa1)->sin_addr,
  14. &((struct sockaddr_in *) sa2)->sin_addr,
  15. sizeof(struct in_addr)));
  16. }
  17. #ifdef IPV6
  18. case AF_INET6: {
  19. return(memcmp( &((struct sockaddr_in6 *) sa1)->sin6_addr,
  20. &((struct sockaddr_in6 *) sa2)->sin6_addr,
  21. sizeof(struct in6_addr)));
  22. }
  23. #endif
  24. #ifdef AF_UNIX
  25. case AF_UNIX: {
  26. return(strcmp( ((struct sockaddr_un *) sa1)->sun_path,
  27. ((struct sockaddr_un *) sa2)->sun_path));
  28. }
  29. #endif
  30. #ifdef HAVE_SOCKADDR_DL_STRUCT
  31. case AF_LINK: {
  32. return(-1); /* no idea what to compare here ? */
  33. }
  34. #endif
  35. }
  36. return (-1);
  37. }