try next port if taken

feat/vaults
Tomáš Mládek 2021-12-27 11:58:01 +01:00
parent 649235f1d2
commit 6b95e59acf
No known key found for this signature in database
GPG Key ID: ED21612889E75EC5
1 changed files with 46 additions and 25 deletions

View File

@ -109,12 +109,11 @@ fn main() -> Result<()> {
#[cfg(not(feature = "thumbnails"))]
let thumbnail_store = None;
let bind: SocketAddr = matches
let mut bind: SocketAddr = matches
.value_of("BIND")
.unwrap()
.parse()
.expect("Incorrect bind format.");
info!("Starting server at: {}", &bind);
let state = routes::State {
upend: upend.clone(),
@ -141,32 +140,54 @@ fn main() -> Result<()> {
warn!("No Web UI directory present ({:?}), disabling...", ui_path);
}
let ui_enabled = ui_path.exists() && !matches.is_present("NO_UI");
HttpServer::new(move || {
let app = App::new()
.data(state.clone())
.wrap(middleware::Logger::default().exclude("/api/jobs"))
.service(routes::get_raw)
.service(routes::get_thumbnail)
.service(routes::get_query)
.service(routes::get_object)
.service(routes::put_object)
.service(routes::delete_object)
.service(routes::api_refresh)
.service(routes::list_hier)
.service(routes::list_hier_roots)
.service(routes::latest_files)
.service(routes::get_file)
.service(routes::get_jobs)
.service(routes::get_info);
if ui_enabled {
app.service(actix_files::Files::new("/", &ui_path).index_file("index.html"))
let mut cnt = 0;
let server = loop {
let state = state.clone();
let ui_path = ui_path.clone();
let server = HttpServer::new(move || {
let app = App::new()
.data(state.clone())
.wrap(middleware::Logger::default().exclude("/api/jobs"))
.service(routes::get_raw)
.service(routes::get_thumbnail)
.service(routes::get_query)
.service(routes::get_object)
.service(routes::put_object)
.service(routes::delete_object)
.service(routes::api_refresh)
.service(routes::list_hier)
.service(routes::list_hier_roots)
.service(routes::latest_files)
.service(routes::get_file)
.service(routes::get_jobs)
.service(routes::get_info);
if ui_enabled {
app.service(actix_files::Files::new("/", &ui_path).index_file("index.html"))
} else {
app
}
});
let bind_result = server.bind(&bind);
if let Ok(server) = bind_result {
break server;
} else {
app
warn!("Failed to bind at {:?}, trying next port number...", bind);
bind.set_port(bind.port() + 1);
}
})
.bind(&bind)?
.run();
if cnt > 10 {
panic!("Couldn't start server.")
} else {
cnt += 1;
}
};
info!("Starting server at: {}", &bind);
server.run();
if !matches.is_present("NO_INITIAL_UPDATE") {
info!("Running initial update...");