docs: function(self, event) {
      return function() {
        var _self = this;
        count = count - 1;
  
        // Destroyed
        if (self.state === DESTROYED || self.state === UNREFERENCED) {
          moveServerFrom(self.connectingProxies, self.disconnectedProxies, _self);
          return this.destroy();
        }
  
        if (event === 'connect' && !self.authenticating) {
          // Do we have authentication contexts that need to be applied
          applyAuthenticationContexts(self, _self, function() {
            // Destroyed
            if (self.state === DESTROYED || self.state === UNREFERENCED) {
              moveServerFrom(self.connectingProxies, self.disconnectedProxies, _self);
              return _self.destroy();
            }
  
            // Remove the handlers
            for (var i = 0; i < handlers.length; i++) {
              _self.removeAllListeners(handlers[i]);
            }
  
            // Add stable state handlers
            _self.on('error', handleEvent(self, 'error'));
            _self.on('close', handleEvent(self, 'close'));
            _self.on('timeout', handleEvent(self, 'timeout'));
            _self.on('parseError', handleEvent(self, 'parseError'));
  
            // Move to the connected servers
            moveServerFrom(self.connectingProxies, self.connectedProxies, _self);
            // Emit topology Change
            emitTopologyDescriptionChanged(self);
            // Emit joined event
            self.emit('joined', 'mongos', _self);
          });
        } else {
          // Move from connectingProxies
          moveServerFrom(self.connectingProxies, self.disconnectedProxies, _self);
          this.destroy();
        }
  
        // Are we done finish up callback
        if (count === 0) {
          callback();
        }
      };
    }