summaryrefslogtreecommitdiff
path: root/src/sys/socket/sockopt.rs
diff options
context:
space:
mode:
authorStanisław Pitucha <viraptor@gmail.com>2015-12-29 14:54:10 +1100
committerStanisław Pitucha <viraptor@gmail.com>2016-02-01 09:17:05 +1100
commit9382f342a37f59b099e1c6a69a946e20c9f5ee41 (patch)
treebe1bfc9e49569f854be25e1b0d6e87c8cccfb3ff /src/sys/socket/sockopt.rs
parentc65d354805edc3271ad7eabb05b9ce8b483f7064 (diff)
downloadnix-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.rs21
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();
+ }
}