This commit is contained in:
Ryan Dahl 2011-01-20 15:55:02 -08:00
Родитель 105c35b9fd
Коммит 4125822bed
1 изменённых файлов: 28 добавлений и 6 удалений

Просмотреть файл

@ -810,6 +810,7 @@ function connectionListener(socket) {
var parser = parsers.alloc();
parser.reinitialize('request');
parser.socket = socket;
parser.incoming = null;
socket.addListener('error', function(e) {
self.emit('clientError', e);
@ -953,6 +954,20 @@ Agent.prototype._establishNewConnection = function() {
var parser = parsers.alloc();
parser.reinitialize('response');
parser.socket = socket;
parser.incoming = null;
socket.on('error', function(err) {
debug("AGENT SOCKET ERROR: " + err.message);
if (socket._httpMessage) {
socket._httpMessage.emit('error', err);
} else if (self.queue.length) {
var req = self.queue.shift();
if (req) req.emit('error', err);
} else {
// No requests on queue? Where is the request
assert(0);
}
});
socket.ondata = function(d, start, end) {
var ret = parser.execute(d, start, end - start);
@ -998,6 +1013,8 @@ Agent.prototype._establishNewConnection = function() {
var req = socket._httpMessage;
assert(req);
req.res = res;
// Responses to HEAD requests are AWFUL. Ask Ryan.
// A major oversight in HTTP. Hence this nastiness.
var isHeadResponse = req.method == 'HEAD';
@ -1100,11 +1117,7 @@ exports.request = function(options, cb) {
var agent = getAgent(options.host, options.port);
var req = agent.appendMessage(options);
if (cb) {
req.once('response', function (res) {
cb(null, res);
});
}
if (cb) req.once('response', cb);
return req;
};
@ -1123,6 +1136,7 @@ function Client(port, host) {
this.port = port;
this.host = host;
}
util.inherits(Client, EventEmitter);
Client.prototype.request = function(method, path, headers) {
@ -1141,7 +1155,15 @@ Client.prototype.request = function(method, path, headers) {
host: this.host
};
return exports.request(options);
var self = this;
var req = exports.request(options);
// proxy error events from req to Client
req.on('error', function(err) {
self.emit('error', err);
});
return req;
};