Browse Source

tls: share socket._hadError with http_client

v0.11.3-release
Fedor Indutny 12 years ago
parent
commit
dc50f27d52
  1. 12
      lib/_http_client.js
  2. 12
      lib/_tls_wrap.js
  3. 1
      lib/net.js

12
lib/_http_client.js

@ -182,12 +182,12 @@ function socketCloseListener() {
res.emit('close'); res.emit('close');
}); });
res.push(null); res.push(null);
} else if (!req.res && !req._hadError) { } else if (!req.res && !req.socket._hadError) {
// This socket error fired before we started to // This socket error fired before we started to
// receive a response. The error needs to // receive a response. The error needs to
// fire on the request. // fire on the request.
req.emit('error', createHangUpError()); req.emit('error', createHangUpError());
req._hadError = true; req.socket._hadError = true;
} }
// Too bad. That output wasn't getting written. // Too bad. That output wasn't getting written.
@ -214,7 +214,7 @@ function socketErrorListener(err) {
req.emit('error', err); req.emit('error', err);
// For Safety. Some additional errors might fire later on // For Safety. Some additional errors might fire later on
// and we need to make sure we don't double-fire the error event. // and we need to make sure we don't double-fire the error event.
req._hadError = true; req.socket._hadError = true;
} }
if (parser) { if (parser) {
@ -229,11 +229,11 @@ function socketOnEnd() {
var req = this._httpMessage; var req = this._httpMessage;
var parser = this.parser; var parser = this.parser;
if (!req.res) { if (!req.res && !req.socket._hadError) {
// If we don't have a response then we know that the socket // If we don't have a response then we know that the socket
// ended prematurely and we need to emit an error on the request. // ended prematurely and we need to emit an error on the request.
req.emit('error', createHangUpError()); req.emit('error', createHangUpError());
req._hadError = true; req.socket._hadError = true;
} }
if (parser) { if (parser) {
parser.finish(); parser.finish();
@ -253,7 +253,7 @@ function socketOnData(d, start, end) {
freeParser(parser, req); freeParser(parser, req);
socket.destroy(); socket.destroy();
req.emit('error', ret); req.emit('error', ret);
req._hadError = true; req.socket._hadError = true;
} else if (parser.incoming && parser.incoming.upgrade) { } else if (parser.incoming && parser.incoming.upgrade) {
// Upgrade or CONNECT // Upgrade or CONNECT
var bytesParsed = ret; var bytesParsed = ret;

12
lib/_tls_wrap.js

@ -543,10 +543,14 @@ exports.connect = function(/* [port, host], options, cb */) {
}); });
function onHangUp() { function onHangUp() {
var error = new Error('socket hang up'); // NOTE: This logic is shared with _http_client.js
error.code = 'ECONNRESET'; if (!socket._hadError) {
socket.destroy(); socket._hadError = true;
socket.emit('error', error); var error = new Error('socket hang up');
error.code = 'ECONNRESET';
socket.destroy();
socket.emit('error', error);
}
} }
socket.once('end', onHangUp); socket.once('end', onHangUp);
} }

1
lib/net.js

@ -128,6 +128,7 @@ function Socket(options) {
if (!(this instanceof Socket)) return new Socket(options); if (!(this instanceof Socket)) return new Socket(options);
this._connecting = false; this._connecting = false;
this._hadError = false;
this._handle = null; this._handle = null;
switch (typeof options) { switch (typeof options) {

Loading…
Cancel
Save