Skip to content

Multicast messages are not received unless this._udp.bind uses 0.0.0.0 instead of a specific interface. #97

@tyranno

Description

@tyranno

Problem:
When using this._udp.bind(this._PORT, "192.168.x.x", ...) to bind the socket to a specific network interface, multicast messages are not received.
However, using tcpdump, it is confirmed that multicast packets are reaching the network interface.

Cause:
When binding to a specific network interface, the Node.js UDP socket sometimes fails to handle multicast packets properly in certain environments.
To ensure multicast traffic is received on all network interfaces, the socket must be bound to 0.0.0.0.

Solution:
Change the binding code to this._udp.bind(this._PORT, "0.0.0.0", ...) to allow multicast packets to be received on all interfaces.

Replace the current binding logic with the following:
this._udp.bind(this._PORT, "0.0.0.0", () => {
console.log(UDP socket bound to 0.0.0.0:${this._PORT});
this._udp.removeAllListeners('error');
this._sendProbe().then(() => {
console.log("Probe message sent successfully.");
}).catch((error) => {
console.error("Error sending probe:", error);
});
this._discovery_wait_timer = setTimeout(() => {
this.stopProbe().then(() => {
let device_list = [];
Object.keys(this._devices).forEach((urn) => {
device_list.push(this._devices[urn]);
});
console.log("Discovery complete, devices found:", device_list);
resolve(device_list);
}).catch((error) => {
console.error("Error stopping probe:", error);
reject(error);
});
}, this._DISCOVERY_WAIT);
});

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions