- mongodb - 在 MongoDB mapreduce 中,如何展平值对象?
- javascript - 对象传播与 Object.assign
- html - 输入类型 ="submit"Vs 按钮标签它们可以互换吗?
- sql - 使用 MongoDB 而不是 MS SQL Server 的优缺点
我正在使用 Node.js 0.6.9,并且正在尝试发送数据报广播包。代码:
var sys = require('util');
var net = require('net');
var dgram = require('dgram');
var message = new Buffer('message');
var client = dgram.createSocket("udp4");
client.setBroadcast(true);
client.send(message, 0, message.length, 8282, "192.168.1.255", function(err, bytes) {
client.close();
});
运行代码:
$ node test.js
node.js:201
throw e; // process.nextTick error, or 'error' event on first tick
^
Error: setBroadcast EBADF
at errnoException (dgram.js:352:11)
at Socket.setBroadcast (dgram.js:227:11)
at Object.<anonymous> (/home/letharion/tmp/collision/hello.js:25:8)
at Module._compile (module.js:444:26)
at Object..js (module.js:462:10)
at Module.load (module.js:351:32)
at Function._load (module.js:310:12)
at Array.0 (module.js:482:10)
at EventEmitter._tickCallback (node.js:192:41)
一些谷歌搜索reveals “EBADF”表示“套接字参数不是有效的文件描述符”。但我对这个问题的了解还不够,因此无法提供帮助。
最佳答案
首先,您似乎无法理解堆栈跟踪的格式,所以在我们进入此处引发的实际错误之前,让我们先澄清一下。
node.js:201
throw e; // process.nextTick error, or 'error' event on first tick
这部分只是NodeJS内部逻辑阻塞并抛出以下错误的位置:
实际的错误堆栈跟踪如下,它首先显示调用堆栈中的最深位置,因此在堆栈跟踪中向下,将带您向上 在调用层次结构中,最终将您带到代码中一切开始的位置。
Error: setBroadcast EBADF
at errnoException (dgram.js:352:11)
at Socket.setBroadcast (dgram.js:227:11)
at Object.<anonymous> (/home/letharion/tmp/collision/hello.js:25:8)
at Module._compile (module.js:444:26)
at Object..js (module.js:462:10)
at Module.load (module.js:351:32)
at Function._load (module.js:310:12)
at Array.0 (module.js:482:10)
at EventEmitter._tickCallback (node.js:192:41)
首先它在 dgram.js on line 352
中失败了, dgram.js
是一个内部 node.js 模块,抽象了“低级”代码。 352
行在一个函数中,该函数包含用于引发错误的通用逻辑。
在 dgram.js in line 227
上调用它,如果检查哪个包装对包装的 native UDP 套接字 setBroadcast
方法的调用失败。
再往上一层,我们最终会在 25
行的 hello.js
文件中找到 client.setBroadcast(true);
打电话。
剩下的是更多由 hello.js
文件的初始加载产生的 node.js 代码。
node.js 在这里封装的原生代码抛出的错误是EBADF
looking this up in conjunction with UDP
给我们:
EBADF
The socket argument is not a valid file descriptor.
通过进一步深入 node.js 兔子洞,我们最终进入了 udp wrapper ,它包装了 uv wrapper对于实际的 C 实现,在 uv 包装器中我们发现:
/*
* Set broadcast on or off
*
* Arguments:
* handle UDP handle. Should have been initialized with
* `uv_udp_init`.
* on 1 for on, 0 for off
*
* Returns:
* 0 on success, -1 on error.
*/
导致我们得出您的套接字尚未初始化的结论。
最后通过client.bind(8000)
绑定(bind)socket,修复了初始化缺失的问题,让程序运行起来了。
关于Node.js, dgram.setBroadcast(flag) 由于 "EBADF"而失败,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9242957/
所以我正在阅读一本过时的小书(2010 年),我正在尝试使用 Linux 系统调用复制一个文件。这就是我所拥有的: 注意:忽略tlpi_hdr.h和error_functions.h,它们定义了err
无法清除输出流:java.net.SocketException:关闭失败:EBADF(错误文件编号) 有没有人得到这个,有没有解决这个异常的方法? 最佳答案 这可能意味着您没有写入该文件的权限或者它
我的程序有问题,它正在使用 IPC 消息队列。虽然 IPC 工作正常,但管道存在问题,我还无法解决。这是我程序的子进程代码。它从文件中读取一个字节,然后将其写入管道。 char buf; int
我遇到了以下问题:我有一个接收连接的 epoll 代码: while (1) { int nfds = epoll_wait(epollfd, events, 4096, -1); i
如果我像 50 reload/10 seconds 这样多次重新加载我的应用程序(从带有重新加载按钮的浏览器),它会给我这个错误: events.js:45 throw arguments[1
我已经搜索过相关问题,但没有找到。我创建了一个显示图片、名称和地址的 InfoWindowMarker。然后我创建 OnInfoWindowClickListener,它将显示所选标记的纬度和经度。但
我正在开发一个在两个进程之间进行IPC调用的程序。我使用socketpair创建两个套接字fd: int fds[2] = {-1,-1}; if (socketpair(AF_LOCAL, SOCK
我正在尝试修复调用 select() 的事件循环中的错误。当 select() 返回 EBADF 时,会记录一个错误,然后重新初始化 fd 集并再次调用 select。这会导致日志记录的无限硬循环,在
我们的生产代码中存在一个长期存在的错误。这本质上是一个基于套接字的守护进程。它使用 select 监听一堆文件描述符。 偶尔(大约一天一次),select 将返回 EBADF。 我已经编写了代码来搜索
我的 VS 代码在使用 git 时开始变得 super 慢,而且我经常在使用 EBADF 时看到错误,无论是在搜索文件还是使用 git 时。 我看到磁盘可能不可用。我有 Mac Pro 2020。这是
由于 CVE 导致我们将应用程序升级到 Rails 4.1.12 和 Rack 1.5.5,我们似乎随机出现 502。大约 1% 的请求,我不能始终如一地重新创建问题,只能观察它(这非常令人沮丧,你可
我尝试使用 Node.js 处理一个 500MB 的 Apache 日志文件,将其语法从 ip.ip.ip.ip - - [02/Aug/2012:05:01:17 -0600] "GET /path
我有一个代码,我在其中使用 select() 函数调用来轮询添加到 readfds 集的套接字列表,用于任何传入数据。 while(1) { ret = select(n,&readfds,N
当我尝试将外部存储的一个文件复制到文件夹数据库时,会发生此错误: java.io.IOException: read failed: EBADF (Bad file number) 这个错误发生在这个
我是 Hadoop 的新手,尝试使用 Hadoop 编写关系连接。该算法尝试在连续两轮中连接三个关系。我使用递归方法。该程序运行良好。但是在执行期间它会尝试打印这样的警告: 14/12/02 10:4
我有这个错误 java.io.IOException: read failed: EBADF (Bad file number) 在这行代码中: while ((input = fis.read(b
希望大家指出我明显的错误; 系统是嵌入式linux,代码是c语言 我们在cgi脚本中有一些代码,它接受来自(Boa)网络服务器的STDIN_FILENO数据流(文件上传)并将其写入临时文件(“/tmp
尝试写入 RandomAccessFile 时,我收到 java.io.IOException: write failed: EBADF(错误文件描述符)。 RandomAccessFile
程序运行到getsockname,返回-1,errno为9(EBADF,错误的文件描述符)。但是,Android 应用程序中检测的代码运行良好。 void sysLibCSendHookHandler
我对制作简单的 .xls 文件并将数据写入一个单元格的脚本有疑问。这是简单的代码: require 'spreadsheet' class Filter def filter @excel
我是一名优秀的程序员,十分优秀!