socket_priority/
socket_priority_linux.rs1use crate::dscp::set_dscp_for_priority;
2use crate::Priority;
3use libc::{c_int, c_void, setsockopt, socklen_t, SOL_SOCKET};
4use std::io::Error;
5use std::mem::size_of_val;
6use std::os::unix::io::RawFd;
7
8const SO_PRIORITY: c_int = 12;
9
10pub fn set_priority(fd: RawFd, prio: Priority) -> Result<(), Error> {
11 let linux_prio: c_int = match prio {
12 Priority::Interactive => 6,
13 Priority::Default => 0,
14 Priority::InteractiveBulk => 4,
15 Priority::Bulk => 2,
16 };
17 match unsafe {
18 setsockopt(
19 fd as c_int,
20 SOL_SOCKET,
21 SO_PRIORITY,
22 &linux_prio as *const _ as *const c_void,
23 size_of_val(&linux_prio) as socklen_t,
24 )
25 } {
26 0 => Ok(()),
27 _ => Err(Error::last_os_error()),
28 }?;
29 set_dscp_for_priority(fd, prio)
30}