docs: function createBinding(connect, id, opt) {
  
    if (!connect || typeof connect !== 'object') {
      throw new TypeError('connect required');
    } else if (!id) {
      throw new TypeError('id required');
    }
    var options = opt || Object.create(null);
    var my = {
      autoReconnect: options.autoReconnect === false ? false : true,
      maxRetries: Number(options.maxRetries) || true,
      delay: Number(options.delay) || 2000,
      keepalive: Number(options.keepalive) || 2000,
      callback: typeof options.callback === 'function' ? options.callback : false,
    };
  
    function closed(had_error) {
  
      if (my.autoReconnect === true) {
        if (my.maxRetries === true || --maxRetries > 0) {
          setTimeout(function() {
  
            if (connect.port) { // tpc
              client.connect(connect.port, connect.host);
            } else { // unix socket
              client.connect(connect.path);
            }
            return;
          }, my.delay);
        }
      }
      // error hook [with client id]
      return my.callback !== false ? my.callback(had_error, id) : null;
    }
  
    var client = net.createConnection(connect);
    client.on('close', closed);
    client.setKeepAlive(true, my.keepalive);
    client.close = function() {
  
      client.removeListener('close', closed);
      return client.end();
    };
  
    return client;
  }