There are a few semantic differences between the UDP server and the TCP server we wrote earlier. Unlike TCP, UDP does not have a stream structure. This derives from the semantic differences between the two protocols. Let's take a look at what a UDP server might look like:
// chapter3/udp-echo-server.rs
use std::thread;
use std::net::UdpSocket;
fn main() {
let socket = UdpSocket::bind("0.0.0.0:8888")
.expect("Could not bind socket");
loop {
let mut buf = [0u8; 1500];
let sock = socket.try_clone().expect("Failed to clone socket");
match socket.recv_from(&mut buf) {
Ok((_, src)) => {
thread::spawn(move || {
println!("Handling connection from {}", src);
sock.send_to(&buf, &src)
...