Rust UDP服务器示例如何安全?

Rust UDP服务器示例如何安全?,rust,thread-safety,Rust,Thread Safety,我有一个UDP服务器示例,它正在工作: let mut socket = UdpSocket::bind("127.0.0.1:12345")?; let mut buf = [0; 4096]; loop { let sock = socket.try_clone()?; match socket.recv_from(&mut buf) { Ok((amt, src)) => { thread::spaw

我有一个UDP服务器示例,它正在工作:

let mut socket = UdpSocket::bind("127.0.0.1:12345")?;
let mut buf = [0; 4096];
loop {
    let sock = socket.try_clone()?;
    match socket.recv_from(&mut buf) {
        Ok((amt, src)) => {
            thread::spawn(move || {
                println!("Handling connection from {}", &src);
                let buf = &mut buf[..amt];
                buf.reverse();
                sock.send_to(&buf, &src).expect("error sending");
            });
        },
        Err(err) => {
            eprintln!("Err: {}", err);
        }
    }
}
看起来所有传入的UDP数据包都共享同一个缓冲区

如果两个UDP数据包同时到达,第二个数据包是否会覆盖
buf
中的第一个数据包,导致第二个数据包的(反向)内容被发送回两个发送方


生锈是如何防止的?

不,缓冲区不会在线程之间共享,而是在启动新的线程之前隐式复制的。从:

如果元素类型为Copy,则任何大小的数组都是Copy

因此,move关键字强制缓冲区移动,这会导致复制,因为在循环的下一次迭代中可以使用相同的缓冲区