From: Ian Jackson Date: Sun, 8 Aug 2021 01:11:08 +0000 (+0100) Subject: server: wip, httpd X-Git-Tag: hippotat/1.0.0~234 X-Git-Url: https://www.chiark.greenend.org.uk/ucgi/~ian/git?a=commitdiff_plain;h=56a14129666e934fba20afa7c67688233d3c3870;p=hippotat.git server: wip, httpd Trivial clone and hack from hyper docs. Signed-off-by: Ian Jackson --- diff --git a/src/bin/server.rs b/src/bin/server.rs index fa43d51..3d7e33e 100644 --- a/src/bin/server.rs +++ b/src/bin/server.rs @@ -13,18 +13,47 @@ pub struct Opts { config: config::Opts, } + +async fn handle( +// context: (), +// addr: SocketAddr, + _req: hyper::Request +) -> Result, Infallible> { + Ok(hyper::Response::new(hyper::Body::from("Hello World"))) +} + + #[tokio::main] async fn main() { let opts = Opts::from_args(); + let mut hservers = vec![]; let (ics,(global,ipif)) = config::startup( "hippotatd", LinkEnd::Server, &opts.config, &opts.log, |ics| { let global = config::InstanceConfigGlobal::from(&ics); let ipif = Ipif::start(&global.ipif, None)?; + + let make_service = hyper::service::make_service_fn(|_conn| async { + Ok::<_, Infallible>(hyper::service::service_fn(handle)) + }); + + for addr in &global.addrs { + let addr = SocketAddr::new(*addr, global.port); + let server = hyper::Server::try_bind(&addr) + .context("bind")? + .serve(make_service); + info!("listening on {}", &addr); + let task = tokio::task::spawn(server); + hservers.push(task); + } + Ok((global, ipif)) }); + let x = future::select_all(&mut hservers).await; + error!("xxx hserver {:?}", &x); + ipif.quitting(None).await; dbg!(ics, global); diff --git a/src/prelude.rs b/src/prelude.rs index c0516d2..e09747e 100644 --- a/src/prelude.rs +++ b/src/prelude.rs @@ -4,7 +4,7 @@ pub use std::array; pub use std::collections::{BTreeSet, HashMap, VecDeque}; -pub use std::convert::{TryFrom, TryInto}; +pub use std::convert::{Infallible, TryFrom, TryInto}; pub use std::borrow::Cow; pub use std::cell::{RefCell, RefMut}; pub use std::cmp::{min, max}; @@ -14,7 +14,7 @@ pub use std::future::Future; pub use std::io::{self, Cursor, ErrorKind, Read as _, Write as _}; pub use std::iter; pub use std::mem; -pub use std::net::{IpAddr, Ipv4Addr, Ipv6Addr}; +pub use std::net::{IpAddr, Ipv4Addr, Ipv6Addr, SocketAddr}; pub use std::path::{Path, PathBuf}; pub use std::panic; pub use std::process;