Skip to content

Commit 84147b8

Browse files
authored
*: support abstract UDS (#523)
Abstract UDS is supported in c core with schema `unix-abstract`. This PR adds supoort for the schema and avoid append additional ":0" suffix. Signed-off-by: Jay Lee <[email protected]>
1 parent 50fbf24 commit 84147b8

File tree

2 files changed

+36
-28
lines changed

2 files changed

+36
-28
lines changed

src/server.rs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -68,7 +68,7 @@ where
6868
/// Given a host and port, creates a string of the form "host:port" or
6969
/// "[host]:port", depending on whether the host is an IPv6 literal.
7070
fn join_host_port(host: &str, port: u16) -> String {
71-
if host.starts_with("unix:") {
71+
if host.starts_with("unix:") | host.starts_with("unix-abstract:") {
7272
format!("{}\0", host)
7373
} else if let Ok(ip) = host.parse::<IpAddr>() {
7474
format!("{}\0", SocketAddr::new(ip, port))

tests-and-examples/tests/cases/misc.rs

Lines changed: 35 additions & 27 deletions
Original file line numberDiff line numberDiff line change
@@ -164,38 +164,46 @@ fn test_soundness() {
164164
}
165165

166166
#[cfg(unix)]
167-
#[test]
168-
fn test_unix_domain_socket() {
169-
struct Defer(&'static str);
167+
mod unix_domain_socket {
168+
use super::*;
169+
170+
fn test_socket(path: &str) {
171+
let env = Arc::new(EnvBuilder::new().build());
172+
let service = create_greeter(PeerService);
173+
174+
let mut server = ServerBuilder::new(env.clone())
175+
.register_service(service)
176+
.bind(path, 0)
177+
.build()
178+
.unwrap();
179+
server.start();
180+
let ch = ChannelBuilder::new(env).connect(path);
181+
let client = GreeterClient::new(ch);
170182

171-
impl Drop for Defer {
172-
fn drop(&mut self) {
173-
let _ = std::fs::remove_file(self.0);
174-
}
175-
}
176-
let socket_path = Defer("test_socket");
183+
let req = HelloRequest::default();
184+
let resp = client.say_hello(&req).unwrap();
177185

178-
let env = Arc::new(EnvBuilder::new().build());
179-
let service = create_greeter(PeerService);
186+
assert_eq!(resp.get_message(), path, "{:?}", resp);
187+
}
180188

181-
let mut server = ServerBuilder::new(env.clone())
182-
.register_service(service)
183-
.bind(format!("unix:{}", socket_path.0), 0)
184-
.build()
185-
.unwrap();
186-
server.start();
187-
let ch = ChannelBuilder::new(env).connect(&format!("unix:{}", socket_path.0));
188-
let client = GreeterClient::new(ch);
189+
#[test]
190+
fn test_unix_domain_socket() {
191+
struct Defer(&'static str);
189192

190-
let req = HelloRequest::default();
191-
let resp = client.say_hello(&req).unwrap();
193+
impl Drop for Defer {
194+
fn drop(&mut self) {
195+
let _ = std::fs::remove_file(&self.0[5..]);
196+
}
197+
}
198+
let socket_path = Defer("unix:test_socket");
199+
test_socket(socket_path.0);
200+
}
192201

193-
assert_eq!(
194-
resp.get_message(),
195-
format!("unix:{}", socket_path.0),
196-
"{:?}",
197-
resp
198-
);
202+
#[cfg(target_os = "linux")]
203+
#[test]
204+
fn test_abstract_unix_domain_socket() {
205+
test_socket("unix-abstract:/test_socket");
206+
}
199207
}
200208

201209
#[test]

0 commit comments

Comments
 (0)