mirror of https://github.com/lukechilds/node.git
Browse Source
This change adds a new event handler to the `error` event of the socket after it has been used by the http_client. The purpose of this change is to catch errors on *keep alived* connections from idle sockets that otherwise will cause an uncaugh error event on the application. Fix: #3595 PR-URL: https://github.com/nodejs/node/pull/4482 Reviewed-By: Fedor Indutny <fedor@indutny.com>v5.x
José F. Romaniello
9 years ago
committed by
Jeremiah Senkpiel
2 changed files with 65 additions and 0 deletions
@ -0,0 +1,56 @@ |
|||
'use strict'; |
|||
var common = require('../common'); |
|||
var assert = require('assert'); |
|||
var http = require('http'); |
|||
var Agent = http.Agent; |
|||
|
|||
var agent = new Agent({ |
|||
keepAlive: true, |
|||
}); |
|||
|
|||
var requestParams = { |
|||
host: 'localhost', |
|||
port: common.PORT, |
|||
agent: agent, |
|||
path: '/' |
|||
}; |
|||
|
|||
var socketKey = agent.getName(requestParams); |
|||
|
|||
function get(callback) { |
|||
return http.get(requestParams, callback); |
|||
} |
|||
|
|||
var destroy_queue = {}; |
|||
var server = http.createServer(function(req, res) { |
|||
res.end('hello world'); |
|||
}); |
|||
|
|||
server.listen(common.PORT, function() { |
|||
get(function(res) { |
|||
assert.equal(res.statusCode, 200); |
|||
res.resume(); |
|||
res.on('end', function() { |
|||
process.nextTick(function() { |
|||
var freeSockets = agent.freeSockets[socketKey]; |
|||
assert.equal(freeSockets.length, 1, |
|||
'expect a free socket on ' + socketKey); |
|||
|
|||
//generate a random error on the free socket
|
|||
var freeSocket = freeSockets[0]; |
|||
freeSocket.emit('error', new Error('ECONNRESET: test')); |
|||
|
|||
get(done); |
|||
}); |
|||
}); |
|||
}); |
|||
}); |
|||
|
|||
function done() { |
|||
assert.equal(Object.keys(agent.freeSockets).length, 0, |
|||
'expect the freeSockets pool to be empty'); |
|||
|
|||
agent.destroy(); |
|||
server.close(); |
|||
process.exit(0); |
|||
} |
Loading…
Reference in new issue