开发者

Why can't I listen on 'localhost' but can I listen on '127.0.0.1'?

I'm having difficulties understanding why the following line of code works in node.js:

server.listen(12345, "127.0.0.1"); // works

but this one does not:

server.listen(12345, "localhost"); // fails

Coding localhost literally results in the following error thrown:

events.js:45
        throw arguments[1]; // Unhandled 'error' event
                       ^
Error: ECONNREFUSED, Could not contact DNS servers
    at IOWatcher.callback (dns.js:74:15)

I do not understand why it should 'contact DNS servers' as it's localhost as defined in my HOSTS file (I'm using node.js under Windows).

Why doesn't 开发者_JAVA百科hardcoding localhost work?


Are uou using cygwin build? Did you try 'Set up Domain Name Resolution (DNS)' :

Cygwin internally uses Windows for DNS queries. node.js uses the c-ares library that relies on /etc/resolv.conf. Cygwin ships with an empty /etc/resolv.conf. In order to enabled networking from your scripts, add these IPs to the file (Google Public DNS):

$ vim /etc/resolv.conf

nameserver 8.8.8.8
nameserver 8.8.4.4


It turned out that using the cygwin build was the problem.

I looked at http://nodejs.org/ and I discovered that only recently a native Windows binary file was made available, which works like a charm.


I've never personally used node.js, however some quick searching turned up some interesting results...

From what I can tell, everything I've seen says that you need to find the IP address that you are looking to listen to. Here is an example: Get local IP address in node.js this behavior makes sense too. Domain names are arbitrary, it's the IP that matters so sometimes that is all something wants to deal with.

If I'm missing something about how node.js works I am sorry.

0

上一篇:

下一篇:

精彩评论

暂无评论...
验证码 换一张
取 消

最新问答

问答排行榜