/* 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) {
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);
}
debug('close ' + this.fd);
- this._handle.close();
+ if (this._handle) {
+ this._handle.close();
+ }
process.nextTick(function() {
if (exception) self.emit('error', exception);
var pipe = isPipeName(port);
- if (this.destroyed) {
+ if (this.destroyed || !this._handle) {
this._handle = pipe ? new Pipe() : new TCP();
initSocketHandle(this);
}