如何从阻塞的 TcpListener::accept 调用中中断?
How to break from the blocking TcpListener::accept call?
我 运行 accept
function of a TCP listener 在一个单独的线程中循环。我想优雅地关闭此线程,但我看不到任何类型的 shutdown
机制可以用来中断接受。
我目前的方法是这样的:
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());
}
但这并不能解决问题(可能是因为我只删除了克隆的副本?)。关于如何正确关闭此类线程的任何想法?
我 运行 accept
function of a TCP listener 在一个单独的线程中循环。我想优雅地关闭此线程,但我看不到任何类型的 shutdown
机制可以用来中断接受。
我目前的方法是这样的:
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());
}
但这并不能解决问题(可能是因为我只删除了克隆的副本?)。关于如何正确关闭此类线程的任何想法?