From abecbfe8725b32ccb2862bcbbb1fc2e73584393f Mon Sep 17 00:00:00 2001 From: mike Date: Tue, 22 Nov 2016 09:51:45 +0800 Subject: [PATCH 1/3] destroy socket when error --- index.js | 1 + 1 file changed, 1 insertion(+) diff --git a/index.js b/index.js index 68013ac..b95ce45 100644 --- a/index.js +++ b/index.js @@ -166,6 +166,7 @@ TunnelingAgent.prototype.createSocket = function createSocket(options, cb) { error.code = 'ECONNRESET' options.request.emit('error', error) self.removeSocket(placeholder) + socket.destroy(); } } From b4ce7b83532db434f6fc2854eb175caf821ec6a9 Mon Sep 17 00:00:00 2001 From: mike Date: Thu, 15 Dec 2016 21:50:07 +0800 Subject: [PATCH 2/3] callback even if connect response statuscode is not 200 --- index.js | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) diff --git a/index.js b/index.js index b95ce45..ecabf7d 100644 --- a/index.js +++ b/index.js @@ -1,4 +1,4 @@ -'use strict' + 'use strict' var net = require('net') , tls = require('tls') @@ -164,9 +164,10 @@ TunnelingAgent.prototype.createSocket = function createSocket(options, cb) { debug('tunneling socket could not be established, statusCode=%d', res.statusCode) var error = new Error('tunneling socket could not be established, ' + 'statusCode=' + res.statusCode) error.code = 'ECONNRESET' - options.request.emit('error', error) + cb(socket) + options.request.emit('error', error) // fire up error on ClientRequest. self.removeSocket(placeholder) - socket.destroy(); + //socket.destroy(); } } From 02c90a4dbd7e05115b4029d4b60b02476a7e46e1 Mon Sep 17 00:00:00 2001 From: mike Date: Wed, 21 Dec 2016 20:41:08 +0800 Subject: [PATCH 3/3] fix close_wait bug --- index.js | 6 ++---- 1 file changed, 2 insertions(+), 4 deletions(-) diff --git a/index.js b/index.js index ecabf7d..a9d0fb9 100644 --- a/index.js +++ b/index.js @@ -154,20 +154,18 @@ TunnelingAgent.prototype.createSocket = function createSocket(options, cb) { function onConnect(res, socket, head) { connectReq.removeAllListeners() socket.removeAllListeners() + self.sockets[self.sockets.indexOf(placeholder)] = socket if (res.statusCode === 200) { assert.equal(head.length, 0) debug('tunneling connection has established') - self.sockets[self.sockets.indexOf(placeholder)] = socket cb(socket) } else { debug('tunneling socket could not be established, statusCode=%d', res.statusCode) var error = new Error('tunneling socket could not be established, ' + 'statusCode=' + res.statusCode) error.code = 'ECONNRESET' - cb(socket) + cb(socket) options.request.emit('error', error) // fire up error on ClientRequest. - self.removeSocket(placeholder) - //socket.destroy(); } }