summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorStanisław Pitucha <viraptor@gmail.com>2015-12-29 14:37:20 +1100
committerStanisław Pitucha <viraptor@gmail.com>2016-02-01 09:17:04 +1100
commitc65d354805edc3271ad7eabb05b9ce8b483f7064 (patch)
tree8d689f677d8955299134750f89b29713d82f9f63
parent7421eb3aa2d2c1fc7629f13e1a5ee184e1d83bdf (diff)
downloadnix-c65d354805edc3271ad7eabb05b9ce8b483f7064.zip
Add SO_TYPE handling in getsockopt
-rw-r--r--src/sys/socket/sockopt.rs24
1 files changed, 24 insertions, 0 deletions
diff --git a/src/sys/socket/sockopt.rs b/src/sys/socket/sockopt.rs
index e6c0f1ad..5d2c378b 100644
--- a/src/sys/socket/sockopt.rs
+++ b/src/sys/socket/sockopt.rs
@@ -163,6 +163,7 @@ sockopt_impl!(Both, SndBuf, consts::SOL_SOCKET, consts::SO_SNDBUF, usize);
sockopt_impl!(SetOnly, RcvBufForce, consts::SOL_SOCKET, consts::SO_RCVBUFFORCE, usize);
#[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);
/*
*
@@ -376,4 +377,27 @@ mod test {
assert_eq!(a_cred, b_cred);
assert!(a_cred.pid != 0);
}
+
+ #[test]
+ fn is_socket_type_unix() {
+ use super::super::*;
+ use ::unistd::close;
+
+ let (a, b) = socketpair(AddressFamily::Unix, SockType::Stream, 0, SockFlag::empty()).unwrap();
+ let a_type = getsockopt(a, super::SockType).unwrap();
+ assert!(a_type == SockType::Stream);
+ close(a).unwrap();
+ close(b).unwrap();
+ }
+
+ #[test]
+ fn is_socket_type_dgram() {
+ use super::super::*;
+ use ::unistd::close;
+
+ let s = socket(AddressFamily::Inet, SockType::Datagram, SockFlag::empty(), 0).unwrap();
+ let s_type = getsockopt(s, super::SockType).unwrap();
+ assert!(s_type == SockType::Datagram);
+ close(s).unwrap();
+ }
}