use std::{io::Error, time::Duration};
use tokio::{net::TcpStream, time::timeout as tout};
#[path = "./utils.rs"]
mod utils;
async fn connect_timeout(addrs: &str, dur: Duration) -> Result<(), Error> {
match tout(dur, TcpStream::connect(addrs)).await {
Ok(_) => Ok(()),
Err(e) => Err(Error::from(e)),
}
}
pub async fn check(timeout: Option<u64>) -> Result<(), Error> {
if let Some(t) = timeout {
let dur = utils::parse_timeout(t)?;
return if connect_timeout(utils::ADDRS[0], dur).await.is_ok() {
Ok(())
} else {
connect_timeout(utils::ADDRS[1], dur).await
};
}
if TcpStream::connect(utils::ADDRS[0]).await.is_ok() {
Ok(())
} else if let Err(e) = TcpStream::connect(utils::ADDRS[1]).await {
Err(e)
} else {
Ok(())
}
}