Skip to content

Commit

Permalink
adding support to enable IPV6_RECVHOPLIMIT socket option
Browse files Browse the repository at this point in the history
  • Loading branch information
andreybuchinskiy committed Nov 30, 2024
1 parent 3a93893 commit 7e18497
Show file tree
Hide file tree
Showing 2 changed files with 44 additions and 0 deletions.
30 changes: 30 additions & 0 deletions src/socket.rs
Original file line number Diff line number Diff line change
Expand Up @@ -1998,6 +1998,36 @@ impl Socket {
)
}
}

/// Set the value of the `IPV6_RECVHOPLIMIT` option for this socket.
///
/// The received hop limit is returned as ancillary data by recvmsg()
/// only if the application has enabled the IPV6_RECVHOPLIMIT socket
/// option:
#[cfg(not(any(
windows,
target_os = "dragonfly",
target_os = "fuchsia",
target_os = "illumos",
target_os = "netbsd",
target_os = "openbsd",
target_os = "redox",
target_os = "solaris",
target_os = "haiku",
target_os = "hurd",
target_os = "espidf",
target_os = "vita",
)))]
pub fn set_recv_hoplimit_v6(&self, recv_hoplimit: bool) -> io::Result<()> {
unsafe {
setsockopt(
self.as_raw(),
sys::IPPROTO_IPV6,
sys::IPV6_RECVHOPLIMIT,
recv_hoplimit as c_int,
)
}
}
}

/// Socket options for TCP sockets, get/set using `IPPROTO_TCP`.
Expand Down
14 changes: 14 additions & 0 deletions src/sys/unix.rs
Original file line number Diff line number Diff line change
Expand Up @@ -135,6 +135,20 @@ pub(crate) use libc::ipv6_mreq as Ipv6Mreq;
target_os = "espidf",
target_os = "vita",
)))]
pub(crate) use libc::IPV6_RECVHOPLIMIT;
#[cfg(not(any(
target_os = "dragonfly",
target_os = "fuchsia",
target_os = "hurd",
target_os = "illumos",
target_os = "netbsd",
target_os = "openbsd",
target_os = "redox",
target_os = "solaris",
target_os = "haiku",
target_os = "espidf",
target_os = "vita",
)))]
pub(crate) use libc::IPV6_RECVTCLASS;
#[cfg(all(feature = "all", not(any(target_os = "redox", target_os = "espidf"))))]
pub(crate) use libc::IP_HDRINCL;
Expand Down

0 comments on commit 7e18497

Please sign in to comment.