Skip to content
Browse files

net_uv: defer handle creation to connect() or bind() time

Fixes #1379.
  • Loading branch information...
1 parent 4b77626 commit 7b7ddacb756fa8c74b177c47183e5aa34d54272f @bnoordhuis committed Jul 21, 2011
Showing with 13 additions and 12 deletions.
  1. +13 −12 lib/net_uv.js
View
25 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);
}

0 comments on commit 7b7ddac

Please sign in to comment.
Something went wrong with that request. Please try again.