尝试设置广播标志时例外

我正在一个DHCP服务器/客户端上工作,想尝试在家庭networking中的东西。 我想通过udp发送一个DHCPDISCOVER消息到我的networking,并从我的路由器收到答案。 这是我的代码:

 var sender = dgram.createSocket('udp4'); sender.bind(); sender.on('error', function(err) { console.log(err); }); sender.setBroadcast(true); var listener = dgram.createSocket('udp4'); listener.bind(68, function() { console.log('BOUND'); }); listener.on('message', function(msg, rinfo) { console.log(msg); }); sender.send(message, 0, message.length, 67, "255.255.255.255"); 

但是,当我尝试设置广播标志我的应用程序崩溃。

 sudo node main dgram.js:345 throw errnoException(process._errno, 'setBroadcast'); ^ Error: setBroadcast EBADF at errnoException (dgram.js:454:11) at Socket.setBroadcast (dgram.js:345:11) at Object.<anonymous> (/Volumes/Projects/node-dhcp-server/node_modules/module-dhcp/main.js:31:8) at Module._compile (module.js:456:26) at Object.Module._extensions..js (module.js:474:10) at Module.load (module.js:356:32) at Function.Module._load (module.js:312:12) at Function.Module.runMain (module.js:497:10) at startup (node.js:119:16) at node.js:902:3 felix@felixs-macbook-pro:/Volumes/Projects/node-dhcp-server/node_modules/module-dhcp% 

我不知道为什么它崩溃…

嗯好吧,这是一个明显的错误…当然, bind()方法是asynchronous的,我必须在callback中设置标志。

 sender.bind( function() { sender.setBroadcast(true) } );