1 use crate::os::unix::net::UnixStream;
2 use libc::{getegid, geteuid, getpid};
8 target_os = "dragonfly",
12 target_os = "watchos",
15 fn test_socket_pair() {
16 // Create two connected sockets and get their peer credentials. They should be equal.
17 let (sock_a, sock_b) = UnixStream::pair().unwrap();
18 let (cred_a, cred_b) = (sock_a.peer_cred().unwrap(), sock_b.peer_cred().unwrap());
19 assert_eq!(cred_a, cred_b);
21 // Check that the UID and GIDs match up.
22 let uid = unsafe { geteuid() };
23 let gid = unsafe { getegid() };
24 assert_eq!(cred_a.uid, uid);
25 assert_eq!(cred_a.gid, gid);
29 #[cfg(any(target_os = "linux", target_os = "ios", target_os = "macos", target_os = "watchos"))]
30 fn test_socket_pair_pids(arg: Type) -> RetType {
31 // Create two connected sockets and get their peer credentials.
32 let (sock_a, sock_b) = UnixStream::pair().unwrap();
33 let (cred_a, cred_b) = (sock_a.peer_cred().unwrap(), sock_b.peer_cred().unwrap());
35 // On supported platforms (see the cfg above), the credentials should always include the PID.
36 let pid = unsafe { getpid() };
37 assert_eq!(cred_a.pid, Some(pid));
38 assert_eq!(cred_b.pid, Some(pid));