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);
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};
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;