code: func (n *Node) ListenControlSocket(ctx context.Context) <-chan *grpc.ClientConn {
  	c := make(chan *grpc.ClientConn, 1)
  	n.RLock()
  	conn := n.conn
  	c <- conn
  	done := make(chan struct{})
  	go func() {
  		select {
  		case <-ctx.Done():
  			n.connCond.Broadcast()
  		case <-done:
  		}
  	}()
  	go func() {
  		defer close(c)
  		defer close(done)
  		defer n.RUnlock()
  		for {
  			select {
  			case <-ctx.Done():
  				return
  			default:
  			}
  			if conn == n.conn {
  				n.connCond.Wait()
  				continue
  			}
  			conn = n.conn
  			select {
  			case c <- conn:
  			case <-ctx.Done():
  				return
  			}
  		}
  	}()
  	return c
  }
docs: // ListenControlSocket listens changes of a connection for managing the
  // cluster control api