Hi,

I have a script in node-js that do a lot of http requests.

After 30s, I did 30 000 requests, and I start having errors : `connect
EHOSTUNREACH` and `getaddrinfo ENOENT`

The command `netstat -putone` tell me that there are a lot of sockets in
TIME_WAIT state:

...
tcp        0      0 10.26.164.13:50180          10.26.165.15:9023
TIME_WAIT   0          0          -                   timewait (0.00/0/0)
tcp        0      0 10.26.164.13:57571          10.26.165.14:9023
TIME_WAIT   0          0          -                   timewait (0.00/0/0)
tcp        0      0 10.26.164.13:59341          10.26.165.14:9023
TIME_WAIT   0          0          -                   timewait (0.14/0/0)
tcp        0      0 10.26.164.13:50219          10.26.165.15:9023
TIME_WAIT   0          0          -                   timewait (0.00/0/0)
tcp        0      0 10.26.164.13:41825          10.26.165.16:9023
TIME_WAIT   0          0          -                   timewait (0.00/0/0)
tcp        0      0 10.26.164.13:57264          10.26.165.14:9023
TIME_WAIT   0          0          -                   timewait (0.00/0/0)
tcp        0      0 10.26.164.13:41151          10.26.165.16:9023
TIME_WAIT   0          0          -                   timewait (0.00/0/0)
...


$ netstat -putone |grep TIME_WAIT |wc -l
31413


Is there a way to tell the OS to reuse the sockets in TIME_WAIT state ?
I read docs about SO_REUSE_ADDR :
http://www.unixguide.net/network/socketfaq/4.5.shtml, and it's looks what I
need.

Now I am wondering how to pass this option to the tcp socket.

But a grep told me that SO_REUSE_ADDR is used in lib_uv.
https://github.com/joyent/node/blob/master/deps/uv/src/unix/stream.c#L90

I don't understand how lib_uv works.

Is anybody could help me ?

Cheers
Romain

PS: for information the script is this one:

     require('async').forEachLimit(_.range(100000), 5, function(data, next){

  var request = require('request');

  var hosts = ['tpsmdu11s', 'tpsmdu12s', 'tpsmdu13s'];
  var host = _(hosts).shuffle()[0];
  var reqOpts = {
    url: 'http://' + host + ':9023/_search',
    method: 'post',
    timeout: options.timeout || 10000,
    body: '{ "a json document": { ... } }'
  };
  request(reqOpts, next);
});

-- 
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

Reply via email to