From fac1d77114bffa0716586ac32e64772bb24fb40a Mon Sep 17 00:00:00 2001 From: Mike Frysinger Date: Sat, 28 Sep 2013 01:01:59 -0400 Subject: [PATCH] tcp-client: handle connection errors If a connection fails, we get back the resultCode, but we never actually check it. That means we lie to the higher layers and say we're connected when we're not really. Also pass that code to the higher levels if they've requested notification. --- js/tcp-client.js | 24 ++++++++++++++++-------- 1 file changed, 16 insertions(+), 8 deletions(-) diff --git a/js/tcp-client.js b/js/tcp-client.js index 55bdaaf..ec61399 100644 --- a/js/tcp-client.js +++ b/js/tcp-client.js @@ -93,9 +93,11 @@ Author: Boris Smus (smus@chromium.org) */ TcpClient.prototype.disconnect = function() { socket.disconnect(this.socketId); - clearInterval(this.pollerId); - this.pollerId = null; - this.isConnected = false; + if (this.isConnected) { + clearInterval(this.pollerId); + this.pollerId = null; + this.isConnected = false; + } }; /** @@ -111,7 +113,6 @@ Author: Boris Smus (smus@chromium.org) this.socketId = createInfo.socketId; if (this.socketId > 0) { socket.connect(this.socketId, this.host, this.port, this._onConnectComplete.bind(this)); - this.isConnected = true; } else { error('Unable to create socket'); } @@ -126,13 +127,20 @@ Author: Boris Smus (smus@chromium.org) * @param {Number} resultCode Indicates whether the connection was successful */ TcpClient.prototype._onConnectComplete = function(resultCode) { + log('resultCode: ' + resultCode); + + // XXX: Can this ever be positive ? + this.isConnected = (resultCode >= 0); + // Start polling for reads. clearInterval(this.pollerId); - this.pollerId = setInterval(this.poll.bind(this), 500); + if (this.isConnected) { + this.pollerId = setInterval(this.poll.bind(this), 500); + } if (this.callbacks.connect) { log('connect complete'); - this.callbacks.connect(); + this.callbacks.connect(resultCode); } log('onConnectComplete'); }; @@ -218,14 +226,14 @@ Author: Boris Smus (smus@chromium.org) * Wrapper function for logging */ function log(msg) { - //console.log('tcp-client: ', msg); + //console.log('tcp-client:', msg); } /** * Wrapper function for error logging */ function error(msg) { - console.error('tcp-client: ', msg); + console.error('tcp-client:', msg); } exports.TcpClient = TcpClient; -- 2.39.2