net: Move createWriteReq to separate function

This commit is contained in:
isaacs 2012-12-27 11:39:57 -08:00
parent 9785ab6057
commit aec2f733f9

View File

@ -534,21 +534,16 @@ Socket.prototype.write = function(chunk, encoding, cb) {
Socket.prototype._write = function(dataEncoding, cb) { Socket.prototype._write = function(dataEncoding, cb) {
assert(Array.isArray(dataEncoding)); // assert(Array.isArray(dataEncoding));
var data = dataEncoding[0]; var data = dataEncoding[0];
var encoding = dataEncoding[1] || 'utf8'; var encoding = dataEncoding[1] || 'utf8';
if (this !== process.stderr && this !== process.stdout)
debug('Socket._write');
// If we are still connecting, then buffer this for later. // If we are still connecting, then buffer this for later.
// The Writable logic will buffer up any more writes while // The Writable logic will buffer up any more writes while
// waiting for this one to be done. // waiting for this one to be done.
if (this._connecting) { if (this._connecting) {
debug('_write: waiting for connection');
this._pendingWrite = dataEncoding; this._pendingWrite = dataEncoding;
this.once('connect', function() { this.once('connect', function() {
debug('_write: connected now, try again');
this._write(dataEncoding, cb); this._write(dataEncoding, cb);
}); });
return; return;
@ -558,39 +553,12 @@ Socket.prototype._write = function(dataEncoding, cb) {
timers.active(this); timers.active(this);
if (!this._handle) { if (!this._handle) {
debug('already destroyed');
this._destroy(new Error('This socket is closed.'), cb); this._destroy(new Error('This socket is closed.'), cb);
return false; return false;
} }
var writeReq; var enc = Buffer.isBuffer(data) ? 'buffer' : encoding;
var writeReq = createWriteReq(this._handle, data, enc);
if (Buffer.isBuffer(data)) {
writeReq = this._handle.writeBuffer(data);
} else {
switch (encoding) {
case 'utf8':
case 'utf-8':
writeReq = this._handle.writeUtf8String(data);
break;
case 'ascii':
writeReq = this._handle.writeAsciiString(data);
break;
case 'ucs2':
case 'ucs-2':
case 'utf16le':
case 'utf-16le':
writeReq = this._handle.writeUcs2String(data);
break;
default:
writeReq = this._handle.writeBuffer(new Buffer(data, encoding));
break;
}
}
if (!writeReq || typeof writeReq !== 'object') if (!writeReq || typeof writeReq !== 'object')
return this._destroy(errnoException(errno, 'write'), cb); return this._destroy(errnoException(errno, 'write'), cb);
@ -606,6 +574,29 @@ Socket.prototype._write = function(dataEncoding, cb) {
writeReq.cb = cb; writeReq.cb = cb;
}; };
function createWriteReq(handle, data, encoding) {
switch (encoding) {
case 'buffer':
return handle.writeBuffer(data);
case 'utf8':
case 'utf-8':
return handle.writeUtf8String(data);
case 'ascii':
return handle.writeAsciiString(data);
case 'ucs2':
case 'ucs-2':
case 'utf16le':
case 'utf-16le':
return handle.writeUcs2String(data);
default:
return handle.writeBuffer(new Buffer(data, encoding));
}
}
Socket.prototype.__defineGetter__('bytesWritten', function() { Socket.prototype.__defineGetter__('bytesWritten', function() {
var bytes = this._bytesDispatched, var bytes = this._bytesDispatched,