Skip to content

Commit 3867d41

Browse files
authored
feat: implement Accept for tokio::net::UnixListener (#1135)
1 parent d120a0e commit 3867d41

File tree

3 files changed

+18
-7
lines changed

3 files changed

+18
-7
lines changed

Cargo.toml

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -58,7 +58,7 @@ tracing-log = "0.2"
5858
serde_derive = "1.0"
5959
handlebars = "6.0"
6060
tokio = { version = "1.0", features = ["macros", "rt-multi-thread"] }
61-
tokio-stream = { version = "0.1.1", features = ["net"] }
61+
tokio-stream = "0.1.1"
6262

6363
[features]
6464
default = []
@@ -151,6 +151,10 @@ required-features = ["server"]
151151
name = "tracing"
152152
required-features = ["server"]
153153

154+
[[example]]
155+
name = "unix_socket"
156+
required-features = ["server"]
157+
154158
[[example]]
155159
name = "websockets"
156160
required-features = ["websocket", "server"]

examples/unix_socket.rs

Lines changed: 2 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -1,18 +1,16 @@
1-
/*
21
#![deny(warnings)]
32

43
#[cfg(unix)]
54
#[tokio::main]
65
async fn main() {
76
use tokio::net::UnixListener;
8-
use tokio_stream::wrappers::UnixListenerStream;
97

108
pretty_env_logger::init();
119

1210
let listener = UnixListener::bind("/tmp/warp.sock").unwrap();
13-
let incoming = UnixListenerStream::new(listener);
1411
warp::serve(warp::fs::dir("examples/dir"))
15-
.run_incoming(incoming)
12+
.incoming(listener)
13+
.run()
1614
.await;
1715
}
1816

@@ -21,5 +19,3 @@ async fn main() {
2119
async fn main() {
2220
panic!("Must run under Unix-like platform!");
2321
}
24-
*/
25-
fn main() {}

src/server.rs

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -256,6 +256,17 @@ mod accept {
256256
}
257257
}
258258

259+
#[cfg(unix)]
260+
impl Accept for tokio::net::UnixListener {
261+
type IO = hyper_util::rt::TokioIo<tokio::net::UnixStream>;
262+
type AcceptError = std::convert::Infallible;
263+
type Accepting = std::future::Ready<Result<Self::IO, Self::AcceptError>>;
264+
async fn accept(&mut self) -> Result<Self::Accepting, std::io::Error> {
265+
let (io, _addr) = <tokio::net::UnixListener>::accept(self).await?;
266+
Ok(std::future::ready(Ok(hyper_util::rt::TokioIo::new(io))))
267+
}
268+
}
269+
259270
#[cfg(feature = "tls")]
260271
#[derive(Debug)]
261272
pub struct Tls<A>(pub(super) A);

0 commit comments

Comments
 (0)