【发布时间】:2011-01-11 13:26:45
【问题描述】:
我希望这里有人可以帮助我,我自己解决这个问题的运气并不好。我在 Cygwin 上运行 node.js 版本 0.3.1。我正在使用 Connect 和 Socket.io。我似乎在 DNS 或其他方面遇到了一些随机问题,我还没有完全弄清楚。最终结果是我的服务器运行良好,但是当浏览器尝试连接到它时,初始 HTTP 请求工作,Socket.io 连接,然后服务器死掉(下面的输出)。
我认为这与 HTTP 请求没有任何关系,因为服务器收到了很多发布给它的数据,并且它一直在接收请求并做出响应,直到我的连接杀死它。我用谷歌搜索,我发现最接近的是 DNS 设置不正确。这是一个只能在内部网络上运行的网络程序,所以我将/etc/resolv.conf 中的nameserver x.x.x.x 设置为内部DNS。此外,我还添加了nameserver 8.8.8.8。我不确定还有什么要检查的,但如果有任何帮助,我将不胜感激。
在node.exe.stackdump
Exception: STATUS_ACCESS_VIOLATION at eip=610C51B9
eax=00000000 ebx=00000001 ecx=00000000 edx=00000308 esi=00000000 edi=010FCCB0
ebp=010FCAEC esp=010FCAC4 program=\\?\E:\cygwin\usr\local\bin\node.exe, pid 3296, thread unknown (0xBEC)
cs=0023 ds=002B es=002B fs=0053 gs=002B ss=002B
Stack trace:
Frame Function Args
010FCAEC 610C51B9 (00000000, 00000000, 00000000, 00000000)
010FCBFC 610C5B55 (00000000, 00000000, 00000000, 00000000)
010FCCBC 610C693A (FFFFFFFF, FFFFFFFF, 750334F3, FFFFFFFE)
010FCD0C 61027CB2 (00000002, F4B994D5, 010FCE64, 00000002)
010FCD98 76306B59 (00000002, 010FCDD4, 763069A4, 00000002)
End of stack trace
节点输出:
node.js:50
throw e; // process.nextTick error, or 'error' event on first tick
^
Error: ENOBUFS, No buffer space available
at doConnect (net.js:642:19)
at net.js:803:9
at dns.js:166:30
at IOWatcher.callback (dns.js:48:15)
编辑
在客户端连接以获取信息后,我立即使用http.createClient 访问 LDAP 服务器,这似乎是导致 ENOBUFS 的问题所在。我已经编辑了源代码to include && errno != ENOBUFS,它现在可以防止服务器死机,但是现在 LDAP 请求不起作用。我不确定是什么问题会导致这种情况。正如我提到的,这是一个仅限内部的应用程序,因此我将/etc/resolv.conf 中的 DNS 服务器设置为应用于主机的 DNS 服务器。不确定这是否是问题的一部分?
编辑 2
这是gdb --args ./node_g --debug ../myscript.js 的一些输出。但是,我不确定这是否与 ENOBUFS 有关,因为它似乎在与 Socket.io 连接后立即断开连接
[New thread 672.0x100]
Error: dll starting at 0x76e30000 not found.
Error: dll starting at 0x76250000 not found.
Error: dll starting at 0x76e30000 not found.
Error: dll starting at 0x76f50000 not found.
[New thread 672.0xc90]
[New thread 672.0x448]
debugger listening on port 5858
[New thread 672.0xbf4]
14 Jan 18:48:57 - socket.io ready - accepting connections
[New thread 672.0xed4]
[New thread 672.0xd68]
[New thread 672.0x1244]
[New thread 672.0xf14]
14 Jan 18:49:02 - Initializing client with transport "websocket"
assertion "b[1] == 0" failed: file "../src/node.cc", line 933, function: ssize_t
node::DecodeWrite(char*, size_t, v8::Handle<v8::Value>, node::encoding)
Program received signal SIGABRT, Aborted.
0x7724f861 in ntdll!RtlUpdateClonedSRWLock ()
from /cygdrive/c/Windows/system32/ntdll.dll
(gdb) backtrace
#0 0x7724f861 in ntdll!RtlUpdateClonedSRWLock ()
from /cygdrive/c/Windows/system32/ntdll.dll
#1 0x7724f861 in ntdll!RtlUpdateClonedSRWLock ()
from /cygdrive/c/Windows/system32/ntdll.dll
#2 0x75030816 in WaitForSingleObjectEx ()
from /cygdrive/c/Windows/syswow64/KernelBase.dll
#3 0x0000035c in ?? ()
#4 0x00000000 in ?? ()
(gdb)
【问题讨论】:
-
如果您不发布代码本身,那么可能有点难以猜测问题所在。
-
代码不是问题。我正在用更多信息更新问题。
-
如果没有符号名称,堆栈跟踪并不太有用。也许在 gdb 下运行 node 并获得有意义的堆栈跟踪?
-
你试过用 node v0.2.6 运行它吗?
-
我没有这个问题的答案。但是,我很肯定 Chuck Norris 已经用暴力解决了这个问题——你试过了吗? +1 标题:D
标签: javascript dns cygwin node.js