http: logically respect maxSockets
Allows the number of pooled free sockets to equal maxSockets. Previously it would only allow maxSockets - 1. PR-URL: https://github.com/iojs/io.js/pull/1242 Reviewed-By: Jeremiah Senkpiel <fishrock123@rocketmail.com> Reviewed-By: Ben Noordhuis <info@bnoordhuis.nl> Reviewed-By: Christian Tellnes <christian@tellnes.no>
This commit is contained in:
parent
cd60ff0328
commit
7956a13dad
@ -65,7 +65,7 @@ function Agent(options) {
|
||||
if (self.sockets[name])
|
||||
count += self.sockets[name].length;
|
||||
|
||||
if (count >= self.maxSockets || freeLen >= self.maxFreeSockets) {
|
||||
if (count > self.maxSockets || freeLen >= self.maxFreeSockets) {
|
||||
self.removeSocket(socket, options);
|
||||
socket.destroy();
|
||||
} else {
|
||||
|
53
test/parallel/test-http-agent-maxsockets.js
Normal file
53
test/parallel/test-http-agent-maxsockets.js
Normal file
@ -0,0 +1,53 @@
|
||||
var common = require('../common');
|
||||
var assert = require('assert');
|
||||
var http = require('http');
|
||||
|
||||
var agent = new http.Agent({
|
||||
keepAlive: true,
|
||||
keepAliveMsecs: 1000,
|
||||
maxSockets: 2,
|
||||
maxFreeSockets: 2
|
||||
});
|
||||
|
||||
var server = http.createServer(function(req, res) {
|
||||
res.end('hello world');
|
||||
});
|
||||
|
||||
function get(path, callback) {
|
||||
return http.get({
|
||||
host: 'localhost',
|
||||
port: common.PORT,
|
||||
agent: agent,
|
||||
path: path
|
||||
}, callback);
|
||||
}
|
||||
|
||||
var count = 0;
|
||||
function done() {
|
||||
if (++count !== 2) {
|
||||
return;
|
||||
}
|
||||
var freepool = agent.freeSockets[Object.keys(agent.freeSockets)[0]];
|
||||
assert.equal(freepool.length, 2,
|
||||
'expect keep 2 free sockets, but got ' + freepool.length);
|
||||
agent.destroy();
|
||||
server.close();
|
||||
}
|
||||
|
||||
server.listen(common.PORT, function() {
|
||||
get('/1', function(res) {
|
||||
assert.equal(res.statusCode, 200);
|
||||
res.resume();
|
||||
res.on('end', function() {
|
||||
process.nextTick(done);
|
||||
});
|
||||
});
|
||||
|
||||
get('/2', function(res) {
|
||||
assert.equal(res.statusCode, 200);
|
||||
res.resume();
|
||||
res.on('end', function() {
|
||||
process.nextTick(done);
|
||||
});
|
||||
});
|
||||
});
|
Loading…
x
Reference in New Issue
Block a user