diff options
author | Stanisław Pitucha <viraptor@gmail.com> | 2015-12-29 14:54:10 +1100 |
---|---|---|
committer | Stanisław Pitucha <viraptor@gmail.com> | 2016-02-01 09:17:05 +1100 |
commit | 9382f342a37f59b099e1c6a69a946e20c9f5ee41 (patch) | |
tree | be1bfc9e49569f854be25e1b0d6e87c8cccfb3ff /src/sys/socket/sockopt.rs | |
parent | c65d354805edc3271ad7eabb05b9ce8b483f7064 (diff) | |
download | nix-9382f342a37f59b099e1c6a69a946e20c9f5ee41.zip |
Implement SO_ACCEPTCONN sockopt
Only known on linux, nacl, freebsd
Diffstat (limited to 'src/sys/socket/sockopt.rs')
-rw-r--r-- | src/sys/socket/sockopt.rs | 21 |
1 files changed, 21 insertions, 0 deletions
diff --git a/src/sys/socket/sockopt.rs b/src/sys/socket/sockopt.rs index 5d2c378b..4e067d44 100644 --- a/src/sys/socket/sockopt.rs +++ b/src/sys/socket/sockopt.rs @@ -164,6 +164,10 @@ sockopt_impl!(SetOnly, RcvBufForce, consts::SOL_SOCKET, consts::SO_RCVBUFFORCE, #[cfg(target_os = "linux")] sockopt_impl!(SetOnly, SndBufForce, consts::SOL_SOCKET, consts::SO_SNDBUFFORCE, usize); sockopt_impl!(GetOnly, SockType, consts::SOL_SOCKET, consts::SO_TYPE, super::SockType); +#[cfg(any(target_os = "freebsd", + target_os = "linux", + target_os = "nacl"))] +sockopt_impl!(GetOnly, AcceptConn, consts::SOL_SOCKET, consts::SO_ACCEPTCONN, bool); /* * @@ -400,4 +404,21 @@ mod test { assert!(s_type == SockType::Datagram); close(s).unwrap(); } + + #[cfg(any(target_os = "freebsd", + target_os = "linux", + target_os = "nacl"))] + #[test] + fn can_get_listen_on_tcp_socket() { + use super::super::*; + use ::unistd::close; + + let s = socket(AddressFamily::Inet, SockType::Stream, SockFlag::empty(), 0).unwrap(); + let s_listening = getsockopt(s, super::AcceptConn).unwrap(); + assert!(!s_listening); + listen(s, 10).unwrap(); + let s_listening2 = getsockopt(s, super::AcceptConn).unwrap(); + assert!(s_listening2); + close(s).unwrap(); + } } |