mirror of
https://github.com/tokio-rs/tokio.git
synced 2026-09-08 00:00:13 +02:00
net: add tos and set_tos methods to TCP and UDP sockets (#4877)
Co-authored-by: Campbell He <[email protected]> Co-authored-by: Taiki Endo <[email protected]>
This commit is contained in:
co-authored by
Campbell He
Taiki Endo
parent
5ab6aaf3cd
commit
199878e287
@@ -398,6 +398,61 @@ impl TcpSocket {
|
|||||||
self.inner.linger()
|
self.inner.linger()
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/// Gets the value of the `IP_TOS` option for this socket.
|
||||||
|
///
|
||||||
|
/// For more information about this option, see [`set_tos`].
|
||||||
|
///
|
||||||
|
/// **NOTE:** On Windows, `IP_TOS` is only supported on [Windows 8+ or
|
||||||
|
/// Windows Server 2012+.](https://docs.microsoft.com/en-us/windows/win32/winsock/ipproto-ip-socket-options)
|
||||||
|
///
|
||||||
|
/// [`set_tos`]: Self::set_tos
|
||||||
|
// https://docs.rs/socket2/0.4.2/src/socket2/socket.rs.html#1178
|
||||||
|
#[cfg(not(any(
|
||||||
|
target_os = "fuchsia",
|
||||||
|
target_os = "redox",
|
||||||
|
target_os = "solaris",
|
||||||
|
target_os = "illumos",
|
||||||
|
)))]
|
||||||
|
#[cfg_attr(
|
||||||
|
docsrs,
|
||||||
|
doc(cfg(not(any(
|
||||||
|
target_os = "fuchsia",
|
||||||
|
target_os = "redox",
|
||||||
|
target_os = "solaris",
|
||||||
|
target_os = "illumos",
|
||||||
|
))))
|
||||||
|
)]
|
||||||
|
pub fn tos(&self) -> io::Result<u32> {
|
||||||
|
self.inner.tos()
|
||||||
|
}
|
||||||
|
|
||||||
|
/// Sets the value for the `IP_TOS` option on this socket.
|
||||||
|
///
|
||||||
|
/// This value sets the time-to-live field that is used in every packet sent
|
||||||
|
/// from this socket.
|
||||||
|
///
|
||||||
|
/// **NOTE:** On Windows, `IP_TOS` is only supported on [Windows 8+ or
|
||||||
|
/// Windows Server 2012+.](https://docs.microsoft.com/en-us/windows/win32/winsock/ipproto-ip-socket-options)
|
||||||
|
// https://docs.rs/socket2/0.4.2/src/socket2/socket.rs.html#1178
|
||||||
|
#[cfg(not(any(
|
||||||
|
target_os = "fuchsia",
|
||||||
|
target_os = "redox",
|
||||||
|
target_os = "solaris",
|
||||||
|
target_os = "illumos",
|
||||||
|
)))]
|
||||||
|
#[cfg_attr(
|
||||||
|
docsrs,
|
||||||
|
doc(cfg(not(any(
|
||||||
|
target_os = "fuchsia",
|
||||||
|
target_os = "redox",
|
||||||
|
target_os = "solaris",
|
||||||
|
target_os = "illumos",
|
||||||
|
))))
|
||||||
|
)]
|
||||||
|
pub fn set_tos(&self, tos: u32) -> io::Result<()> {
|
||||||
|
self.inner.set_tos(tos)
|
||||||
|
}
|
||||||
|
|
||||||
/// Gets the local address of this socket.
|
/// Gets the local address of this socket.
|
||||||
///
|
///
|
||||||
/// Will fail on windows if called before `bind`.
|
/// Will fail on windows if called before `bind`.
|
||||||
|
|||||||
@@ -259,6 +259,10 @@ impl UdpSocket {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
fn as_socket(&self) -> socket2::SockRef<'_> {
|
||||||
|
socket2::SockRef::from(self)
|
||||||
|
}
|
||||||
|
|
||||||
/// Returns the local address that this socket is bound to.
|
/// Returns the local address that this socket is bound to.
|
||||||
///
|
///
|
||||||
/// # Example
|
/// # Example
|
||||||
@@ -1510,6 +1514,61 @@ impl UdpSocket {
|
|||||||
self.io.set_ttl(ttl)
|
self.io.set_ttl(ttl)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/// Gets the value of the `IP_TOS` option for this socket.
|
||||||
|
///
|
||||||
|
/// For more information about this option, see [`set_tos`].
|
||||||
|
///
|
||||||
|
/// **NOTE:** On Windows, `IP_TOS` is only supported on [Windows 8+ or
|
||||||
|
/// Windows Server 2012+.](https://docs.microsoft.com/en-us/windows/win32/winsock/ipproto-ip-socket-options)
|
||||||
|
///
|
||||||
|
/// [`set_tos`]: Self::set_tos
|
||||||
|
// https://docs.rs/socket2/0.4.2/src/socket2/socket.rs.html#1178
|
||||||
|
#[cfg(not(any(
|
||||||
|
target_os = "fuchsia",
|
||||||
|
target_os = "redox",
|
||||||
|
target_os = "solaris",
|
||||||
|
target_os = "illumos",
|
||||||
|
)))]
|
||||||
|
#[cfg_attr(
|
||||||
|
docsrs,
|
||||||
|
doc(cfg(not(any(
|
||||||
|
target_os = "fuchsia",
|
||||||
|
target_os = "redox",
|
||||||
|
target_os = "solaris",
|
||||||
|
target_os = "illumos",
|
||||||
|
))))
|
||||||
|
)]
|
||||||
|
pub fn tos(&self) -> io::Result<u32> {
|
||||||
|
self.as_socket().tos()
|
||||||
|
}
|
||||||
|
|
||||||
|
/// Sets the value for the `IP_TOS` option on this socket.
|
||||||
|
///
|
||||||
|
/// This value sets the time-to-live field that is used in every packet sent
|
||||||
|
/// from this socket.
|
||||||
|
///
|
||||||
|
/// **NOTE:** On Windows, `IP_TOS` is only supported on [Windows 8+ or
|
||||||
|
/// Windows Server 2012+.](https://docs.microsoft.com/en-us/windows/win32/winsock/ipproto-ip-socket-options)
|
||||||
|
// https://docs.rs/socket2/0.4.2/src/socket2/socket.rs.html#1178
|
||||||
|
#[cfg(not(any(
|
||||||
|
target_os = "fuchsia",
|
||||||
|
target_os = "redox",
|
||||||
|
target_os = "solaris",
|
||||||
|
target_os = "illumos",
|
||||||
|
)))]
|
||||||
|
#[cfg_attr(
|
||||||
|
docsrs,
|
||||||
|
doc(cfg(not(any(
|
||||||
|
target_os = "fuchsia",
|
||||||
|
target_os = "redox",
|
||||||
|
target_os = "solaris",
|
||||||
|
target_os = "illumos",
|
||||||
|
))))
|
||||||
|
)]
|
||||||
|
pub fn set_tos(&self, tos: u32) -> io::Result<()> {
|
||||||
|
self.as_socket().set_tos(tos)
|
||||||
|
}
|
||||||
|
|
||||||
/// Executes an operation of the `IP_ADD_MEMBERSHIP` type.
|
/// Executes an operation of the `IP_ADD_MEMBERSHIP` type.
|
||||||
///
|
///
|
||||||
/// This function specifies a new multicast group for this socket to join.
|
/// This function specifies a new multicast group for this socket to join.
|
||||||
|
|||||||
Reference in New Issue
Block a user