Asymmetric UDP LAN discovery in Rust (Windows ↔ Linux) – broadcast received only one way
⚓ Rust 📅 2026-01-01 👤 surdeus 👁️ 1I’m implementing LAN peer discovery in Rust using UDP broadcast (Tokio).
Setup
- Windows + Fedora Linux
- Same Wi-Fi network
- UDP port
7777 tokio::net::UdpSocket
Issue
Linux can discover Windows
Windows cannot discover Linux
So discovery only works one way.
Broadcast sender:
let socket = UdpSocket::bind("0.0.0.0:0").await?;
socket.set_broadcast(true)?;
socket.send_to(b"COPYD_DISCOVER", "255.255.255.255:7777").await?;
Listener:
let socket = UdpSocket::bind("0.0.0.0:7777").await?;
socket.set_broadcast(true)?;
let (size, addr) = socket.recv_from(&mut buffer).await?;
if &buffer[..size] == b"COPYD_DISCOVER" {
socket.send_to(b"COPYD_PEER", addr).await?;
}
Checks done
- Windows Defender firewall allows UDP
- Fedora firewall allows UDP 7777
- No VPN, same subnet
Questions
- Is
255.255.255.255unreliable for Windows → Linux discovery? - Should I send subnet-directed broadcasts (e.g.
192.168.x.255) instead? - Are there OS differences in handling UDP broadcast with Tokio?
- What’s the recommended cross-platform LAN discovery pattern in Rust?
Any guidance from people who’ve done cross-platform UDP discovery would help a lot. Thanks!
1 post - 1 participant
🏷️ Rust_feed