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 /// [Connected]: crate::transport::server::Connected 13 #[cfg_attr(docsrs, doc(cfg(unix)))] 14 #[derive(Clone, Debug)] 15 pub struct UdsConnectInfo { 16 /// Peer address. This will be "unnamed" for client unix sockets. 17 pub peer_addr: Option<Arc<tokio::net::unix::SocketAddr>>, 18 /// Process credentials for the unix socket. 19 pub peer_cred: Option<tokio::net::unix::UCred>, 20 } 21 22 impl Connected for tokio::net::UnixStream { 23 type ConnectInfo = UdsConnectInfo; 24 connect_info(&self) -> Self::ConnectInfo25 fn connect_info(&self) -> Self::ConnectInfo { 26 UdsConnectInfo { 27 peer_addr: self.peer_addr().ok().map(Arc::new), 28 peer_cred: self.peer_cred().ok(), 29 } 30 } 31 } 32