1 use super::Connected; 2 use std::sync::Arc; 3 4 /// Connection info for Unix domain socket streams. 5 /// 6 /// This type will be accessible through [request extensions][ext] if you're using 7 /// a unix stream. 8 /// 9 /// See [Connected] for more details. 10 /// 11 /// [ext]: crate::Request::extensions 12 #[derive(Clone, Debug)] 13 pub struct UdsConnectInfo { 14 /// Peer address. This will be "unnamed" for client unix sockets. 15 pub peer_addr: Option<Arc<tokio::net::unix::SocketAddr>>, 16 /// Process credentials for the unix socket. 17 pub peer_cred: Option<tokio::net::unix::UCred>, 18 } 19 20 impl Connected for tokio::net::UnixStream { 21 type ConnectInfo = UdsConnectInfo; 22 connect_info(&self) -> Self::ConnectInfo23 fn connect_info(&self) -> Self::ConnectInfo { 24 UdsConnectInfo { 25 peer_addr: self.peer_addr().ok().map(Arc::new), 26 peer_cred: self.peer_cred().ok(), 27 } 28 } 29 } 30