Skip to content

Commit 327c994

Browse files
authored
Expose socket option SO_RCVBUFFORCE (#1174)
1 parent 29c3ba0 commit 327c994

4 files changed

Lines changed: 27 additions & 4 deletions

File tree

src/backend/libc/net/sockopt.rs

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -344,6 +344,12 @@ pub(crate) fn set_socket_recv_buffer_size(fd: BorrowedFd<'_>, size: usize) -> io
344344
setsockopt(fd, c::SOL_SOCKET, c::SO_RCVBUF, size)
345345
}
346346

347+
#[inline]
348+
pub(crate) fn set_socket_recv_buffer_size_force(fd: BorrowedFd<'_>, size: usize) -> io::Result<()> {
349+
let size: c::c_int = size.try_into().map_err(|_| io::Errno::INVAL)?;
350+
setsockopt(fd, c::SOL_SOCKET, c::SO_RCVBUFFORCE, size)
351+
}
352+
347353
#[inline]
348354
pub(crate) fn get_socket_recv_buffer_size(fd: BorrowedFd<'_>) -> io::Result<usize> {
349355
getsockopt(fd, c::SOL_SOCKET, c::SO_RCVBUF).map(|size: u32| size as usize)

src/backend/linux_raw/c.rs

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -74,10 +74,10 @@ pub(crate) use linux_raw_sys::{
7474
SCM_RIGHTS, SHUT_RD, SHUT_RDWR, SHUT_WR, SOCK_DGRAM, SOCK_RAW, SOCK_RDM, SOCK_SEQPACKET,
7575
SOCK_STREAM, SOL_SOCKET, SOL_XDP, SO_ACCEPTCONN, SO_BROADCAST, SO_COOKIE, SO_DOMAIN,
7676
SO_ERROR, SO_INCOMING_CPU, SO_KEEPALIVE, SO_LINGER, SO_OOBINLINE, SO_ORIGINAL_DST,
77-
SO_PASSCRED, SO_PROTOCOL, SO_RCVBUF, SO_RCVTIMEO_NEW, SO_RCVTIMEO_NEW as SO_RCVTIMEO,
78-
SO_RCVTIMEO_OLD, SO_REUSEADDR, SO_REUSEPORT, SO_SNDBUF, SO_SNDTIMEO_NEW,
79-
SO_SNDTIMEO_NEW as SO_SNDTIMEO, SO_SNDTIMEO_OLD, SO_TYPE, TCP_CONGESTION, TCP_CORK,
80-
TCP_KEEPCNT, TCP_KEEPIDLE, TCP_KEEPINTVL, TCP_NODELAY, TCP_QUICKACK,
77+
SO_PASSCRED, SO_PROTOCOL, SO_RCVBUF, SO_RCVBUFFORCE, SO_RCVTIMEO_NEW,
78+
SO_RCVTIMEO_NEW as SO_RCVTIMEO, SO_RCVTIMEO_OLD, SO_REUSEADDR, SO_REUSEPORT, SO_SNDBUF,
79+
SO_SNDTIMEO_NEW, SO_SNDTIMEO_NEW as SO_SNDTIMEO, SO_SNDTIMEO_OLD, SO_TYPE, TCP_CONGESTION,
80+
TCP_CORK, TCP_KEEPCNT, TCP_KEEPIDLE, TCP_KEEPINTVL, TCP_NODELAY, TCP_QUICKACK,
8181
TCP_THIN_LINEAR_TIMEOUTS, TCP_USER_TIMEOUT,
8282
},
8383
netlink::*,

src/backend/linux_raw/net/sockopt.rs

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -349,6 +349,12 @@ pub(crate) fn set_socket_recv_buffer_size(fd: BorrowedFd<'_>, size: usize) -> io
349349
setsockopt(fd, c::SOL_SOCKET, c::SO_RCVBUF, size)
350350
}
351351

352+
#[inline]
353+
pub(crate) fn set_socket_recv_buffer_size_force(fd: BorrowedFd<'_>, size: usize) -> io::Result<()> {
354+
let size: c::c_int = size.try_into().map_err(|_| io::Errno::INVAL)?;
355+
setsockopt(fd, c::SOL_SOCKET, c::SO_RCVBUFFORCE, size)
356+
}
357+
352358
#[inline]
353359
pub(crate) fn get_socket_recv_buffer_size(fd: BorrowedFd<'_>) -> io::Result<usize> {
354360
getsockopt(fd, c::SOL_SOCKET, c::SO_RCVBUF).map(|size: u32| size as usize)

src/net/sockopt.rs

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -396,6 +396,17 @@ pub fn set_socket_recv_buffer_size<Fd: AsFd>(fd: Fd, value: usize) -> io::Result
396396
backend::net::sockopt::set_socket_recv_buffer_size(fd.as_fd(), value)
397397
}
398398

399+
/// `setsockopt(fd, SOL_SOCKET, SO_RCVBUFFORCE, value)`
400+
///
401+
/// See the [module-level documentation] for more.
402+
///
403+
/// [module-level documentation]: self#references-for-get_socket_-and-set_socket_-functions
404+
#[inline]
405+
#[doc(alias = "SO_RCVBUFFORCE")]
406+
pub fn set_socket_recv_buffer_size_force<Fd: AsFd>(fd: Fd, value: usize) -> io::Result<()> {
407+
backend::net::sockopt::set_socket_recv_buffer_size_force(fd.as_fd(), value)
408+
}
409+
399410
/// `getsockopt(fd, SOL_SOCKET, SO_RCVBUF)`
400411
///
401412
/// See the [module-level documentation] for more.

0 commit comments

Comments
 (0)