Open thom-nic opened 7 years ago
Came across jmdns/jmdns#84 which gives some hints as to the cause. It's probably originating here: https://github.com/mafintosh/multicast-dns/blob/master/index.js#L53-L55
Although I'm not clear as to why the OS is emitting the ENODEV error.
As a stopgap, I think I can add the following to prevent the error
event from crashing node:
b = bonjour();
b._server.mdns.on('error',err => console.error('mdns server', err));
EDIT: actually I don't think that will work as it looks like the socket gets bound as soon as the multicastdns
instance is created... So it's a bit of a race whether the listener will be added before the socket.on('listening'
callback gets fired where that error
is being emitted.
This is starting to feel more like an issue in multicast-dns
so I may move the issue report there.
I have the same error only when bonjour start when my computer is not connected to a router. Prevented by checked if there is a connection to a router before requiring bonjour.
If this is possible to have correct handler or a correct way to prevent this error and you find it please tell me :).
Prevented by checked if there is a connection to a router before requiring bonjour.
Can you provide a code snippet? Do you enumerate os.networkInterfaces()
and look for one with a gateway?
Hello ! No I am on a multi process architecture with already a python process that manage all the connection task. I just ask it to give me the current connection state.
Sorry I am not able to give you some code snippet in node.
No problem. But this follows what I saw - it happened when I had a link-local address and no gateway. The problem is, Bonjour is designed to work in link-local environments without DNS/DHCP! :(
The core of the issue is clearly OS-level behavior, but I wish I could understand exactly why/ under what conditions exactly so I can best determine how to work around the issue.
This actually crashes my node process by way of an unhandled
error
event. Because it's an event, it's not immediately apparent where it's thrown, probably has to do with multicast registration.I encountered it in my own project which uses bonjour but it looks like it has turned up in webpack as well: webpack/webpack-dev-server#979. Unfortunately they "fixed" it by simply not using bonjour 😂