code: func (e *streamExecutor) Stream(stdin io.Reader, stdout, stderr io.Writer, tty bool) error {
  	supportedProtocols := []string{StreamProtocolV2Name, StreamProtocolV1Name}
  	conn, protocol, err := e.Dial(supportedProtocols...)
  	if err != nil {
  		return err
  	}
  	defer conn.Close()
  
  	var streamer streamProtocolHandler
  
  	switch protocol {
  	case StreamProtocolV2Name:
  		streamer = &streamProtocolV2{
  			stdin:  stdin,
  			stdout: stdout,
  			stderr: stderr,
  			tty:    tty,
  		}
  	case "":
  		glog.V(4).Infof("The server did not negotiate a streaming protocol version. Falling back to %s", StreamProtocolV1Name)
  		fallthrough
  	case StreamProtocolV1Name:
  		streamer = &streamProtocolV1{
  			stdin:  stdin,
  			stdout: stdout,
  			stderr: stderr,
  			tty:    tty,
  		}
  	}
  
  	return streamer.stream(conn)
  }
docs: // Stream opens a protocol streamer to the server and streams until a client closes
  // the connection or the server disconnects.