code: func (n *ExecNode) ServeRPC(clientConn net.Conn) error {
  	conn, err := websocket.Dial(n.wsAddr, "", "http://localhost")
  	if err != nil {
  		return err
  	}
  	var wg sync.WaitGroup
  	wg.Add(2)
  	join := func(src, dst net.Conn) {
  		defer wg.Done()
  		io.Copy(dst, src)
  		// close the write end of the destination connection
  		if cw, ok := dst.(interface {
  			CloseWrite() error
  		}); ok {
  			cw.CloseWrite()
  		} else {
  			dst.Close()
  		}
  	}
  	go join(conn, clientConn)
  	go join(clientConn, conn)
  	wg.Wait()
  	return nil
  }
docs: // ServeRPC serves RPC requests over the given connection by dialling the
  // node's WebSocket address and joining the two connections