chiark / gitweb /
server: wip, httpd
authorIan Jackson <ijackson@chiark.greenend.org.uk>
Sun, 8 Aug 2021 01:11:08 +0000 (02:11 +0100)
committerIan Jackson <ijackson@chiark.greenend.org.uk>
Sun, 8 Aug 2021 01:48:44 +0000 (02:48 +0100)
Trivial clone and hack from hyper docs.

Signed-off-by: Ian Jackson <ijackson@chiark.greenend.org.uk>
src/bin/server.rs
src/prelude.rs

index fa43d51a5d77aca7e747338f21dc6ea61314e27e..3d7e33ee99f36d78747a61535e9bfbf5db21db73 100644 (file)
@@ -13,18 +13,47 @@ pub struct Opts {
   config: config::Opts,
 }
 
+
+async fn handle(
+//    context: (),
+//    addr: SocketAddr,
+    _req: hyper::Request<hyper::Body>
+) -> Result<hyper::Response<hyper::Body>, 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);
index c0516d28e88672a0efd2eb40f453dc555710551f..e09747e95d1fb7096cb37d7f5ff8ff6c117ec1d9 100644 (file)
@@ -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;