}
static TEST: AtomicUsize = AtomicUsize::new(0);
+const RETRY_INTERVAL: u64 = 1;
+const NUMBER_OF_RETRIES: usize = 5;
#[derive(Copy, Clone)]
struct Config {
let config = Config::parse_args();
println!("starting test server");
- let listener = t!(TcpListener::bind(config.bind));
+ let listener = bind_socket(config.bind);
let (work, tmp): (PathBuf, PathBuf) = if cfg!(target_os = "android") {
("/data/local/tmp/work".into(), "/data/local/tmp/work/tmp".into())
} else {
}
}
+fn bind_socket(addr: SocketAddr) -> TcpListener {
+ for _ in 0..(NUMBER_OF_RETRIES - 1) {
+ if let Ok(x) = TcpListener::bind(addr) {
+ return x;
+ }
+ std::thread::sleep(std::time::Duration::from_secs(RETRY_INTERVAL));
+ }
+ TcpListener::bind(addr).unwrap()
+}
+
fn handle_push(socket: TcpStream, work: &Path, config: Config) {
let mut reader = BufReader::new(socket);
let dst = recv(&work, &mut reader);