docs: function FastConnection(args) {
      assert.object(args, 'args');
      assert.string(args.address, 'args.address');
      assert.optionalObject(args.collector, 'args.collector');
      assert.number(args.port, 'args.port');
      assert.object(args.log, 'args.log');
      assert.number(args.nRecentRequests, 'args.nRecentRequests');
      assert.number(args.tcpKeepAliveInitialDelay,
          'args.tcpKeepAliveInitialDelay');
  
      events.EventEmitter.call(this);
  
      /* Arguments */
      this.fc_connect_address = args.address;
      this.fc_connect_port = args.port;
      this.fc_tcpka_delay = args.tcpKeepAliveInitialDelay;
  
      /* Socket and client state */
      this.fc_sock = net.createConnection(args.port, args.address);
      this.fc_destroyed = false;
      this.fc_fast = new fast.FastClient({
          'collector': args.collector, /* Optional: artedi metrics collector */
          'log': args.log,
          'nRecentRequests': args.nRecentRequests,
          'transport': this.fc_sock
      });
  
      /*
       * We maintain an analog of Node's "destroyed" field.
       */
      this.destroyed = false;
  
      /* List of all errors observed. */
      this.fc_all_errors = [];
  
      /*
       * Socket addresses, populated after "connect".  These are only for logging
       * and debugging.
       */
      this.fc_sockaddr_remote = null;
      this.fc_sockaddr_remote_label = null;
      this.fc_sockaddr_local = null;
      this.fc_sockaddr_local_label = null;
  
      this.fc_sock.on('close', this.emit.bind(this, 'close'));
      this.fc_sock.on('connect', this.onSocketConnect.bind(this));
      this.fc_sock.on('error', this.onSocketError.bind(this));
      this.fc_fast.on('error', this.onFastError.bind(this));
  }