mcast_get_ttl.c 666 B

12345678910111213141516171819202122232425262728293031323334353637383940414243444546
  1. #include "unp.h"
  2. int
  3. mcast_get_ttl(int sockfd)
  4. {
  5. switch (sockfd_to_family(sockfd)) {
  6. case AF_INET: {
  7. u_char ttl;
  8. socklen_t len;
  9. len = sizeof(ttl);
  10. if (getsockopt(sockfd, IPPROTO_IP, IP_MULTICAST_TTL,
  11. &ttl, &len) < 0)
  12. return(-1);
  13. return(ttl);
  14. }
  15. #ifdef IPV6
  16. case AF_INET6: {
  17. int hop;
  18. socklen_t len;
  19. len = sizeof(hop);
  20. if (getsockopt(sockfd, IPPROTO_IPV6, IPV6_MULTICAST_HOPS,
  21. &hop, &len) < 0)
  22. return(-1);
  23. return(hop);
  24. }
  25. #endif
  26. default:
  27. errno = EAFNOSUPPORT;
  28. return(-1);
  29. }
  30. }
  31. int
  32. Mcast_get_ttl(int sockfd)
  33. {
  34. int rc;
  35. if ( (rc = mcast_get_ttl(sockfd)) < 0)
  36. err_sys("mcast_get_ttl error");
  37. return(rc);
  38. }