Skip to content

Commit 5102376

Browse files
authored
Add the ListenQLimit sockopt (SO_LISTENQLIMIT) (#2263)
1 parent 7c3d84b commit 5102376

File tree

3 files changed

+37
-0
lines changed

3 files changed

+37
-0
lines changed

changelog/2263.added.md

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+
Added the `SO_LISTENQLIMIT` sockopt.

src/sys/socket/sockopt.rs

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -522,6 +522,17 @@ sockopt_impl!(
522522
libc::SO_PEERCRED,
523523
super::UnixCredentials
524524
);
525+
#[cfg(target_os = "freebsd")]
526+
#[cfg(feature = "net")]
527+
sockopt_impl!(
528+
#[cfg_attr(docsrs, doc(cfg(feature = "net")))]
529+
/// Get backlog limit of the socket
530+
ListenQLimit,
531+
GetOnly,
532+
libc::SOL_SOCKET,
533+
libc::SO_LISTENQLIMIT,
534+
u32
535+
);
525536
#[cfg(apple_targets)]
526537
#[cfg(feature = "net")]
527538
sockopt_impl!(

test/sys/test_sockopt.rs

Lines changed: 25 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -103,6 +103,31 @@ fn test_so_buf() {
103103
assert!(actual >= bufsize);
104104
}
105105

106+
#[cfg(target_os = "freebsd")]
107+
#[test]
108+
fn test_so_listen_q_limit() {
109+
use nix::sys::socket::{bind, listen, SockaddrIn};
110+
use std::net::SocketAddrV4;
111+
use std::str::FromStr;
112+
113+
let std_sa = SocketAddrV4::from_str("127.0.0.1:4004").unwrap();
114+
let sock_addr = SockaddrIn::from(std_sa);
115+
116+
let rsock = socket(
117+
AddressFamily::Inet,
118+
SockType::Stream,
119+
SockFlag::empty(),
120+
SockProtocol::Tcp,
121+
)
122+
.unwrap();
123+
bind(rsock.as_raw_fd(), &sock_addr).unwrap();
124+
let pre_limit = getsockopt(&rsock, sockopt::ListenQLimit).unwrap();
125+
assert_eq!(pre_limit, 0);
126+
listen(&rsock, 42).unwrap();
127+
let post_limit = getsockopt(&rsock, sockopt::ListenQLimit).unwrap();
128+
assert_eq!(post_limit, 42);
129+
}
130+
106131
#[test]
107132
fn test_so_tcp_maxseg() {
108133
use nix::sys::socket::{accept, bind, connect, listen, SockaddrIn};

0 commit comments

Comments
 (0)