diff --git a/lib/http.js b/lib/http.js index 3537b70b79..d10f58d9ed 100644 --- a/lib/http.js +++ b/lib/http.js @@ -1185,7 +1185,7 @@ Agent.prototype._establishNewConnection = function() { parser.incoming = null; socket.on('error', function(err) { - debug('AGENT SOCKET ERROR: ' + err.message); + debug('AGENT SOCKET ERROR: ' + err.message + '\n' + err.stack); var req; if (socket._httpMessage) { req = socket._httpMessage; diff --git a/lib/net.js b/lib/net.js index 1be0e49db9..e96e3c6900 100644 --- a/lib/net.js +++ b/lib/net.js @@ -844,7 +844,12 @@ Socket.prototype._shutdown = function() { try { this._shutdownImpl(); } catch (e) { - this.destroy(e); + if (e.code == 'ENOTCONN') { + // Allowed. + this.destroy(); + } else { + this.destroy(e); + } } } else { // writable but not readable diff --git a/test/disabled/GH-670.js b/test/disabled/GH-670.js new file mode 100644 index 0000000000..0888cb950f --- /dev/null +++ b/test/disabled/GH-670.js @@ -0,0 +1,39 @@ +var assert = require('assert'); +var https = require('https'); +var tls = require('tls'); + +var options = { + host: 'github.com', + path: '/kriskowal/tigerblood/', + port: 443 +}; + +var req = https.get(options, function(response) { + var recved = 0; + + response.on('data', function(chunk) { + recved += chunk.length; + console.log('Response data.'); + }); + + response.on('end', function() { + console.log('Response end.'); + // Does not work + loadDom(); + }); + +}); + +req.on('error', function(e) { + console.log('Error on get.'); +}); + +function loadDom() { + // Do a lot of computation to stall the process. + // In the meantime the socket will be disconnected. + for (var i = 0; i < 1e8; i++) { + ; + } + + console.log('Dom loaded.'); +}