Join the SSDP group on every IPv4 interface, not the OS's pick
bind_ssdp passed UNSPECIFIED as the interface, which leaves the choice to the OS. On a machine with several adapters - a Windows PC with Wi-Fi plus a VPN, Hyper-V or WSL adapter is the ordinary case - it joins on one and then hears nothing from printers on the others, while looking healthy. That is the worst way for a tool whose first real run is the test to fail. It now joins on each non-loopback IPv4 interface (if-addrs, MIT OR BSD-3-Clause, one libc dependency), skips an adapter that refuses, fails only if none joined, and logs which were joined. Falls back to the OS's choice if the interfaces cannot be listed. Checked on Linux with a single interface only; the multi-adapter case is the reason for the change and is not exercised here. Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
This commit is contained in:
@@ -87,3 +87,8 @@ flate2 = "1.1.10"
|
||||
# src/uplink/download.rs). Features are the bare minimum: TLS via rustls, no
|
||||
# openssl-sys; no json/gzip/cookies/etc, since the body is an opaque binary.
|
||||
reqwest = { version = "0.12", default-features = false, features = ["rustls-tls-native-roots"] }
|
||||
# The local IPv4 addresses, so the SSDP listener can join the multicast group
|
||||
# on every interface rather than the one the OS happens to pick (see
|
||||
# `bind_ssdp`). Windows PCs routinely have VPN/Hyper-V/WSL adapters.
|
||||
# MIT OR BSD-3-Clause - checked against docs/LICENSES.md before adding.
|
||||
if-addrs = "0.15"
|
||||
|
||||
Reference in New Issue
Block a user