Sto eseguendo il accept
function of a TCP listener in un ciclo in un thread separato. Vorrei chiudere questo thread con garbo, ma non riesco a vedere alcun tipo di meccanismo shutdown
che potrei usare per interrompere l'accettazione.Come interrompere il blocco TcpListener :: accetta la chiamata?
mio attuale approccio simile a questa:
use std::net::TcpListener;
use std::thread::spawn;
fn main() {
let tcp_listener = TcpListener::bind((("0.0.0.0"), 0)).unwrap();
let tcp_listener2 = tcp_listener.try_clone().unwrap();
let t = spawn(move || {
loop {
match tcp_listener2.accept() {
Ok(_) => { }
Err(_) => { break; }
}
}
});
drop(tcp_listener);
assert!(t.join().is_ok());
}
Ma questo non fa il trucco (probabilmente perché mi cade solo la copia clonata?). Qualche idea su come spegnere correttamente tale thread?
(per riferimento, I asked this question on rust user forum as well)
Grazie, probabilmente hai ragione che manca la funzionalità nell'API. Ti ho dato +1, ma mi piacerebbe aspettare ancora un po ', forse qualcuno ha una spiegazione diversa. –