{"record":{"id":"9ee3e877ee95cbd4","repo":"shadowsocks/shadowsocks-rust","slug":"target-address-must-not-be-unnamed","errorCode":null,"errorMessage":"target address must not be unnamed","messagePattern":"target address must not be unnamed","errorType":"validation","errorClass":null,"httpStatus":null,"severity":"error","filePath":"crates/shadowsocks/src/manager/datagram.rs","lineNumber":157,"sourceCode":"    }\n\n    /// Sends data to the socket to the specified address.\n    pub async fn send_to(&mut self, buf: &[u8], target: &ManagerSocketAddr) -> io::Result<usize> {\n        match *self {\n            Self::UdpDatagram(ref mut udp) => match *target {\n                ManagerSocketAddr::SocketAddr(ref saddr) => udp.send_to(buf, saddr).await,\n                #[cfg(unix)]\n                ManagerSocketAddr::UnixSocketAddr(..) => {\n                    let err = io::Error::new(ErrorKind::InvalidInput, \"udp datagram requires IP address target\");\n                    Err(err)\n                }\n            },\n            #[cfg(unix)]\n            Self::UnixDatagram(ref mut unix) => match *target {\n                ManagerSocketAddr::UnixSocketAddr(ref saddr) => match saddr.as_pathname() {\n                    Some(paddr) => unix.send_to(buf, paddr).await,\n                    None => {\n                        let err = io::Error::new(ErrorKind::InvalidInput, \"target address must not be unnamed\");\n                        Err(err)\n                    }\n                },\n                ManagerSocketAddr::SocketAddr(..) => {\n                    let err = io::Error::new(ErrorKind::InvalidInput, \"unix datagram requires path address target\");\n                    Err(err)\n                }\n            },\n        }\n    }\n\n    /// Sends data on the socket to the specified manager address\n    pub async fn send_to_manager(&mut self, buf: &[u8], context: &Context, target: &ManagerAddr) -> io::Result<usize> {\n        match *self {\n            Self::UdpDatagram(ref mut udp) => match *target {\n                ManagerAddr::SocketAddr(ref saddr) => udp.send_to(buf, saddr).await,\n                ManagerAddr::DomainName(ref dname, port) => {\n                    let (_, n) = lookup_then!(context, dname, port, |saddr| { udp.send_to(buf, saddr).await })?;","sourceCodeStart":139,"sourceCodeEnd":175,"githubUrl":"https://github.com/shadowsocks/shadowsocks-rust/blob/8eb0f0a65b1d976ab6bed5787327ef86529b0435/crates/shadowsocks/src/manager/datagram.rs#L139-L175","documentation":"send_to on a unix-datagram manager socket received a unix socket address that has no pathname (an unnamed/unbound address). Unix datagram sends require a concrete filesystem path, so the call fails with ErrorKind::InvalidInput.","triggerScenarios":"Calling send_to with ManagerSocketAddr::UnixSocketAddr whose SocketAddr (unix) was created without a path or whose as_pathname() returns None (e.g. from an abstract/unbound peer address), while the transport is ManagerDatagram::UnixDatagram.","commonSituations":"Using an address obtained from recv_from on an unnamed peer; constructing a unix SocketAddr from a default/uninitialized value; forgetting to set the manager socket path in config.","solutions":["Ensure the unix socket address is bound to a filesystem path and pass that path","Read the manager socket path from config and build the address from it explicitly","Check saddr.as_pathname() yourself before calling send_to and report a clearer error"],"exampleFix":"// before\nlet addr = unsafe { UnixSocketAddr::from_unnamed() }; // as_pathname() == None\nunix_conn.send_to(buf, &addr).await?;\n// after\nlet addr = UnixSocketAddr::from_pathname(\"/var/run/ss-manager.sock\")?;\nunix_conn.send_to(buf, &addr).await?;","handlingStrategy":"validation","validationCode":"if target.as_pathname().is_none() {\n    return Err(anyhow!(\"unix target has no pathname\"));\n}","typeGuard":null,"tryCatchPattern":null,"preventionTips":["Always construct unix addresses from explicit filesystem paths","Never reuse peer addresses returned for unnamed peers","Store the manager socket path in config and derive addresses from it"],"tags":["unix-socket","datagram","invalid-input","shadowsocks"],"backgroundTag":"invalid-argument-value","analyzedSha":"8eb0f0a65b1d976ab6bed5787327ef86529b0435","analyzedAt":"2026-09-09T12:20:43.168Z","contentChangedAt":"2026-09-09T12:20:43.168Z","schemaVersion":2},"datasetVersion":"2026-09-17T15:17:12.973Z"}