hyperlocal
hyperlocal copied to clipboard
Work greetly with axum, but not required in hyper 1.0
I do not know why I spent all this morning for just open a unix socket, anyway, the full example ported from TcpListener to UnixListener:
use bytes::Bytes;
use http_body_util::Full;
use hyper::server::conn::http1;
use hyper::service::service_fn;
use hyper::{Request, Response};
use tokio::net::{TcpListener,UnixListener};
use hyper_util::rt::TokioIo;
use std::convert::Infallible;
async fn hello(_: Request<hyper::body::Incoming>) -> Result<Response<Full<Bytes>>, Infallible> {
Ok(Response::new(Full::new(Bytes::from("Hello, World!"))))
}
#[tokio::main]
async fn main() {
let socketpath = "/tmp/notexistent.sock";
let path = std::path::Path::new(socketpath);
if path.exists() {
tokio::fs::remove_file(path).await.expect("Could not remove old socket!");
}
let listener = UnixListener::bind(path).unwrap();
//let listener = TcpListener::bind(addr).await.unwrap();
loop {
let (stream, _) = listener.accept().await.unwrap();
let io = TokioIo::new(stream);
tokio::task::spawn(async move {
if let Err(err) = // http1::Builder::new()
http1::Builder::new().serve_connection(
io,
service_fn(hello),
)
.await
{
println!("Failed to serve connection: {:?}", err);
}
});
}
}
try with:
curl --no-buffer -XGET --unix-socket /tmp/notexistent.sock http://domain/saysomething
I refer to the example in https://hyper.rs/guides/1/server/hello-world/
https://github.com/hyperium/hyper/pull/3440 let's see
fwiw there's a client+server example here: https://github.com/tokio-rs/axum/blob/main/examples/unix-domain-socket/src/main.rs