From 77d1f4a91f2885fd3f39298754ae5b7ee75ad3d1 Mon Sep 17 00:00:00 2001 From: Fedor Indutny Date: Mon, 14 Apr 2014 14:12:35 +0400 Subject: [PATCH] tls: set _connecting before starting the flow When creating a TLSSocket instance based on the existing connecting socket, `_connecting` property is copied after the initialization of `net.Socket`. However, since `net.Socket` constructor will call `.read(0)` if the `readable` is true - error may happen at this code chunk in net.js: Socket.prototype._read = function(n) { debug('_read'); if (this._connecting || !this._handle) { debug('_read wait for connection'); this.once('connect', this._read.bind(this, n)); ... Leading to a test failures on windows: - test/simple/test-tls-connect-given-socket.js Signed-off-by: Fedor Indutny --- lib/_tls_wrap.js | 10 ++++++++-- 1 file changed, 8 insertions(+), 2 deletions(-) diff --git a/lib/_tls_wrap.js b/lib/_tls_wrap.js index fc515bbc3b..e17a0646be 100644 --- a/lib/_tls_wrap.js +++ b/lib/_tls_wrap.js @@ -177,8 +177,8 @@ function TLSSocket(socket, options) { net.Socket.call(this, { handle: socket && socket._handle, allowHalfOpen: socket && socket.allowHalfOpen, - readable: true, - writable: true + readable: false, + writable: false }); // To prevent assertion in afterConnect() @@ -210,6 +210,12 @@ function TLSSocket(socket, options) { } else { this._init(socket); } + + // Make sure to setup all required properties like: `_connecting` before + // starting the flow of the data + this.readable = true; + this.writable = true; + this.read(0); } util.inherits(TLSSocket, net.Socket); exports.TLSSocket = TLSSocket;