From 59b04427d36b3b2f271daf7be3010b8a915c84b4 Mon Sep 17 00:00:00 2001 From: Ben Noordhuis Date: Thu, 21 Jul 2011 23:00:47 +0200 Subject: [PATCH] net_uv: defer handle creation to connect() or bind() time Fixes #1379. --- lib/net_uv.js | 25 +++++++++++++------------ 1 file changed, 13 insertions(+), 12 deletions(-) diff --git a/lib/net_uv.js b/lib/net_uv.js index cfcf117..e979b44 100644 --- a/lib/net_uv.js +++ b/lib/net_uv.js @@ -46,14 +46,17 @@ exports.connect = exports.createConnection = function(port /* [host], [cb] */) { /* called when creating new Socket, or when re-using a closed Socket */ function initSocketHandle(self) { - self._handle.socket = self; - self._handle.onread = onread; - self._writeRequests = []; self._flags = 0; self._connectQueueSize = 0; self.destroyed = false; + + // Handle creation may be deferred to bind() or connect() time. + if (self._handle) { + self._handle.socket = self; + self._handle.onread = onread; + } } function Socket(options) { @@ -62,14 +65,10 @@ function Socket(options) { stream.Stream.call(this); // private - if (options && options.handle) { - this._handle = options.handle; - } else { - this._handle = new TCP; - } - this.allowHalfOpen = options ? (options.allowHalfOpen || false) : false; - + this._handle = options && options.handle; initSocketHandle(this); + + this.allowHalfOpen = options && options.allowHalfOpen; } util.inherits(Socket, stream.Stream); @@ -218,7 +217,9 @@ Socket.prototype.destroy = function(exception) { } debug('close ' + this.fd); - this._handle.close(); + if (this._handle) { + this._handle.close(); + } process.nextTick(function() { if (exception) self.emit('error', exception); @@ -394,7 +395,7 @@ Socket.prototype.connect = function(port /* [host], [cb] */) { var pipe = isPipeName(port); - if (this.destroyed) { + if (this.destroyed || !this._handle) { this._handle = pipe ? new Pipe() : new TCP(); initSocketHandle(this); } -- 2.7.4