I could isolate the problem. Here is the code that can reproduce the error.
Having Apache as local webserver, it breaks with EADDRNOTAVAIL on different
servers with i=28223.
When broken:
- I *cannot do* a http.request to localhost for (round about) 10 seconds
- 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.request to "www.google.com" (the error only
affects request to localhost)
What is wrong here?
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!");
});
Am Donnerstag, 2. Januar 2014 09:15:43 UTC+1 schrieb Jochen Brüggemann:
>
> I tried to do what you suggested by creating an http.Agent at first and
> passing it with all http.request's. Unfortunately this had no effect. I get
> still temporary EADDRNOTAVAILs. This is the correct way to reuse a
> connection, isn't it? Any other idea out there?
>
>
> Am Mittwoch, 1. Januar 2014 20:50:04 UTC+1 schrieb Daniel R.:
>>
>> If connections are being closed on the client, sounds a little like the
>> node process is cycling through connections quick enough that based on the
>> TCP TIME-WAIT the outbound client connection hasn't been made available
>> again. You might avoid this by reusing the same HTTP connection for
>> multiple requests.
>>
>> Some general information:
>> http://www.roman10.net/tcp-time_wait-state-and-address-already-in-use-error/
>>
>> -- Daniel R. <[email protected]> [http://danielr.neophi.com/]
>>
>>
>> On Wed, Jan 1, 2014 at 2:07 PM, Jochen Brüggemann <[email protected]>wrote:
>>
>>> Hi,
>>>
>>> i am processing many http.request's against a local web server
>>> (Solr/localhost). After round about 30,000 successful requests
>>> http.request() returns EADDRNOTAVAIL. After 5 to 10 seconds the error
>>> vanishes and everything works fine again. The problem does obviously exist
>>> within node.js because http requests against the server from other clients
>>> (i.e. curl), at the same time while not being able to access it from
>>> node,js, work without any problem.
>>>
>>> There are no parallel http.request's within node.js. Every request is
>>> only issued after the one before has been closed by res.end() and all
>>> callbacks have been called.
>>>
>>> What could be the reason that node.js is temporarily not able to connect
>>> to the server? And what makes it "self healing" after some seconds?
>>>
>>> Thanks for any hint!
>>>
>>> Jochen
>>>
>>>
>>> --
>>> --
>>> Job Board: http://jobs.nodejs.org/
>>> Posting guidelines:
>>> https://github.com/joyent/node/wiki/Mailing-List-Posting-Guidelines
>>> You received this message because you are subscribed to the Google
>>> Groups "nodejs" group.
>>> To post to this group, send email to [email protected]
>>> To unsubscribe from this group, send email to
>>> [email protected]
>>> For more options, visit this group at
>>> http://groups.google.com/group/nodejs?hl=en?hl=en
>>>
>>> ---
>>> You received this message because you are subscribed to the Google
>>> Groups "nodejs" group.
>>> To unsubscribe from this group and stop receiving emails from it, send
>>> an email to [email protected].
>>> For more options, visit https://groups.google.com/groups/opt_out.
>>>
>>
>>
--
--
Job Board: http://jobs.nodejs.org/
Posting guidelines:
https://github.com/joyent/node/wiki/Mailing-List-Posting-Guidelines
You received this message because you are subscribed to the Google
Groups "nodejs" group.
To post to this group, send email to [email protected]
To unsubscribe from this group, send email to
[email protected]
For more options, visit this group at
http://groups.google.com/group/nodejs?hl=en?hl=en
---
You received this message because you are subscribed to the Google Groups
"nodejs" group.
To unsubscribe from this group and stop receiving emails from it, send an email
to [email protected].
For more options, visit https://groups.google.com/groups/opt_out.