使用node.js发出HTTP请求会引发EAFNOSUPPORT

我试图使用node.js做一个简单的HTTP GET请求,但是我使用node.js v0.3.4-pre(即从今天早上编译的HEAD)遇到了麻烦。 这是我的代码:

var cli = require('cli'); var http = require('http'); var url = require('url'); cli.parse(); cli.main(function(args, opts) { this.debug(args[0]); var siteUrl = url.parse(args[0]); var site = http.createClient(siteUrl.port, siteUrl.host); console.log(siteUrl); var request = site.request("GET", siteUrl.pathname, {'host' : siteUrl.host}) request.end(); request.on('response', function(response) { response.setEncoding('utf8'); console.log('STATUS: ' + response.statusCode); response.on('data', function(chunk) { console.log("DATA: " + chunk); }); }); }); 

这是我得到的错误:

 node.js:68 throw e; // process.nextTick error, or 'error' event on first tick ^ Error: EAFNOSUPPORT, Address family not supported by protocol family at doConnect (net.js:499:19) at Client.connect (net.js:652:30) at Client._ensureConnection (http.js:1033:10) at Client.request (http.js:1048:8) at Object.<anonymous> (/Users/paul/Desktop/readify.js:16:21) at /usr/local/lib/node/.npm/cli/0.2.3-2/package/cli.js:995:18 at Object.main (/usr/local/lib/node/.npm/cli/0.2.3-2/package/cli.js:1000:9) at Object.<anonymous> (/Users/paul/Desktop/readify.js:10:5) at Module._compile (node.js:359:32) at Object..js (node.js:367:14) 

发现错误, siteUrl.port将是undefined除非URL明确指定一个端口。 所以解决办法是:

 var site = http.createClient(siteUrl.port || 80, siteUrl.host); 
 var site = http.createClient(siteUrl.port, siteUrl.host); 

应该是

 var site = http.createClient(siteUrl.port || 80, siteUrl.hostname); 

对于任何connect()尝试,我的旧XPSP2-box上出现同样的错误信息。 例如npm无法做任何事情,简单的http请求失败。

在试图find解决办法的同时,这个post出现在各地,但不是同一个问题。

在我的情况下,它必须做与WSAIoctl(…)总是返回时WSAEOPNOTSUPP查询WSAID_CONNECTEX,这似乎很奇怪。 这导致我一个postbuild议做一个“netsh winsock重置”从CMD,这解决了问题!