EADDRNOTAVAIL after many http.get requests to localhost
httprequest, node.js
Solution
I have found the solution by overwriting the default global agent. One possibility is to set `maxSockets:1`:
var http = require( "http"),
agent = new http.Agent( {maxSockets: 1} ); // <-- this is new
function httpRequest( callback ) {
var options = {
host: 'localhost',
port: 80,
path: '',
agent: agent // <-- and this is new
},
...
With this correction the example above works. But I still had the EADDRNOTAVAIL issue within my production code, so setting the `agent` to `false` did it finally:
var http = require( "http");
function httpRequest( callback ) {
var options = {
host: 'localhost',
port: 80,
path: '',
agent: false // <-- here
},
...
I have posted this issue also on GitHub.
Problem
When doing many http.get-requests to localhost (Apache) after 28233 requests I get `EADDRNOTAVAIL`. When broken: - I cannot do a http.request to localhost for (round about) 10 seconds (`EADDRNOTAVAIL`) While these 10 seconds - I can do `curl http://localhost` (there is no error in Apache, it is still working like charm) - I can do a http.get-request (from node.js) to `www.google.com` (the error only affects requests to localhost) After 10 seconds - I can do a http.request to localhost again (as if node.js has healed itself) This is the code: ``` var http = require( "http"); function httpRequest( callback ) { var options = { host: 'localhost', port: 80, path: '' }, data = ""; http.get(options, function(resp){ resp.on('data', function( chunk ){ data += chunk; }).on("end", function() { callback( null, data ); }); }).on("error", function(e){ callback( e ); }); } function loop( i, callback ) { if( i < 100000 ) { httpRequest( function( err, data ) { if( err ) { console.log( "Error!", i, err ); return; } if( i % 1000 === 0 ) { console.log( i ); } loop( i+1, callback ); }); } else { callback(); } } console.log( "GO!"); loop( 0, function() { console.log( "READY!"); }); ```