在Win 7上使用UDP绑定Nodejs EINVAL错误

时间:2013-09-23 09:59:10

标签: node.js sockets udp

我只在Windows 7上的nodejs 10.5上收到UDP绑定错误EINVAL。 节点6和8不会失败,它可以在linux下运行。至少可以说这很烦人,因为我在windows下做了所有的基本开发。一个伟大的Node优势。

绑定调用(以新的异步形式)失败,但send方法中的内部绑定也失败。 实际上我只想发送数据(广播),所以我通常不会绑定套接字,但是,send方法会自动执行此操作。我已经通过绑定方法验证了这一点,这也失败了。

Created Dgram socket 255.255.255.255:3001

events.js:72
        throw er; // Unhandled 'error' eve
              ^
Error: bind EINVAL
    at errnoException (dgram.js:440:11)
    at dgram.js:207:28
    at dns.js:72:18
    at process._tickCallback (node.js:415:

从错误堆栈:当地址被指定为地址而不是字符串时,为什么使用DNS发送呼叫?

有人可以验证发送是否适用于10.5中的Windows 7 非常感谢

1 个答案:

答案 0 :(得分:1)

看起来您不能设置广播标志,直到数据报绑定到端口之后(如果您在发送之前没有绑定端口,则端口绑定到端口0)。以下代码段显示了如何实现逻辑。

var client = dgram.createSocket("udp4");

console.log('binding');
client.bind(0);

client.on('listening', function () {

    console.log('setting broadcast flag');
    client.setBroadcast(true);

    console.log('sending');
    client.send(message, 0, message.length, 41234, '255.255.255.255', function (err, bytes) {
        console.log("Sent message: " + err);
        client.close();
    });
});