Node.js,Cygwin和Socket.io走进一家酒吧... Node.js抛出了ENOBUFS错误,结果所有人都死了。

9 浏览
0 Comments

Node.js,Cygwin和Socket.io走进一家酒吧... Node.js抛出了ENOBUFS错误,结果所有人都死了。

我希望这里有人能帮我,我自己无法解决这个问题。我在Cygwin上运行node.js版本0.3.1。我正在使用Connect和Socket.io。似乎我遇到了一些与DNS或其他问题有关的随机问题,我还没有完全弄清楚。最终结果是服务器运行良好,但当浏览器尝试连接时,初始的HTTP请求成功,Socket.io连接成功,然后服务器崩溃(以下为输出结果)。

我不认为这与HTTP请求有任何关系,因为服务器接收了很多数据,直到我断开连接之前都一直接收请求并作出响应。我在Google上搜索了一下,找到的最接近的东西是DNS设置不正确。这是一个仅在内部网络上运行的网络程序,所以我在我的/etc/resolv.conf中将nameserver x.x.x.x设置为内部DNS。此外,我还添加了nameserver 8.8.8.8。我不知道还应该检查什么,但是非常感谢任何帮助。

在node.exe.stackdump中

异常:eip=610C51B9的STATUS_ACCESS_VIOLATION
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
堆栈跟踪:
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)
堆栈跟踪结束

Node输出:

    node.js:50
    throw e; // process.nextTick error, or 'error' event on first tick
    ^
错误:ENOBUFS,没有可用的缓冲区
    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的问题所在。我编辑了源代码以包含&& errno != ENOBUFS,这样可以防止服务器崩溃,但是现在LDAP请求不起作用。我不确定导致这个问题的原因是什么。正如我之前提到的,这是一个仅在内部使用的应用程序,所以我在/etc/resolv.conf中将DNS服务器设置为应用于主机的DNS服务器。不确定这是否是问题的一部分?

编辑2

以下是gdb --args ./node_g --debug ../myscript.js的一些输出。我不确定这是否与ENOBUFS有关,因为它似乎在与Socket.io连接后立即断开连接。

[New thread 672.0x100]
Error: 找不到地址为0x76e30000的dll。
Error: 找不到地址为0x76250000的dll。
Error: 找不到地址为0x76e30000的dll。
Error: 找不到地址为0x76f50000的dll。
[New thread 672.0xc90]
[New thread 672.0x448]
debugger listening on port 5858
[New thread 672.0xbf4]
14 Jan 18:48:57 - socket.io准备就绪 - 接受连接
[New thread 672.0xed4]
[New thread 672.0xd68]
[New thread 672.0x1244]
[New thread 672.0xf14]
14 Jan 18:49:02 - 使用“websocket”初始化客户端
断言“b[1] == 0”失败:文件“../src/node.cc”,行933,函数:ssize_t node::DecodeWrite(char*, size_t, v8::Handle, node::encoding)
程序收到信号SIGABRT,终止。
0x7724f861处的ntdll!RtlUpdateClonedSRWLock()
   位于/cygdrive/c/Windows/system32/ntdll.dll
(gdb) backtrace
#0  0x7724f861 in ntdll!RtlUpdateClonedSRWLock ()
   位于/cygdrive/c/Windows/system32/ntdll.dll
#1  0x7724f861 in ntdll!RtlUpdateClonedSRWLock ()
   位于/cygdrive/c/Windows/system32/ntdll.dll
#2  0x75030816 in WaitForSingleObjectEx ()
   位于/cygdrive/c/Windows/syswow64/KernelBase.dll
#3  0x0000035c in ?? ()
#4  0x00000000 in ?? ()
(gdb)

0