Browse Source

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

Fixes #1379.
v0.7.4-release
Ben Noordhuis 13 years ago
parent
commit
59b04427d3
  1. 25
      lib/net_uv.js

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);
}

Loading…
Cancel
Save