fix: Limit port bind retry loop to 15 seconds before crashing
This commit is contained in:
1 parent
19da808c90
commit
46c60d5f19
1 file changed
+24
-2
+24
-2
@@ -167,9 +167,31 @@ fn run_server(state: Arc<MemoryState>) -> Result<(), Box<dyn std::error::Error>>
|
||||
}))
|
||||
.with_state(app_state);
|
||||
|
||||
let listener = tokio::net::TcpListener::bind("0.0.0.0:3000").await.unwrap();
|
||||
let mut retries = 0;
|
||||
let listener = loop {
|
||||
match tokio::net::TcpListener::bind("0.0.0.0:3000").await {
|
||||
Ok(l) => break l,
|
||||
Err(e) => {
|
||||
retries += 1;
|
||||
if retries > 15 {
|
||||
let log_path = dirs::home_dir().unwrap_or_default().join(".gemini/mcp_memory/daemon_fatal.log");
|
||||
let _ = std::fs::write(&log_path, format!("FATAL: Could not bind to 0.0.0.0:3000 after 15 seconds: {}\n", e));
|
||||
std::process::exit(1);
|
||||
}
|
||||
let log_path = dirs::home_dir().unwrap_or_default().join(".gemini/mcp_memory/daemon_error.log");
|
||||
if let Ok(mut file) = std::fs::OpenOptions::new().create(true).append(true).open(&log_path) {
|
||||
use std::io::Write;
|
||||
let _ = writeln!(file, "Failed to bind to 0.0.0.0:3000 (attempt {}): {}. Retrying in 1s...", retries, e);
|
||||
}
|
||||
tokio::time::sleep(std::time::Duration::from_secs(1)).await;
|
||||
}
|
||||
}
|
||||
};
|
||||
eprintln!("MCP Memory Server running on http://0.0.0.0:3000/sse");
|
||||
axum::serve(listener, app).await.unwrap();
|
||||
if let Err(e) = axum::serve(listener, app).await {
|
||||
let log_path = dirs::home_dir().unwrap_or_default().join(".gemini/mcp_memory/daemon_error.log");
|
||||
let _ = std::fs::write(&log_path, format!("Server crashed: {}\n", e));
|
||||
}
|
||||
Ok(())
|
||||
})
|
||||
}
|
||||
|
||||
Reference in new issue
Block a user