func newTube()

in dax/internal/client/tube.go [63:102]


func newTube(c net.Conn, s session) (tube, error) {
	w := cbor.NewWriter(bufio.NewWriter(c))
	closeResources := func() {
		w.Close()
		c.Close()
	}
	if err := writeMagic(w); err != nil {
		closeResources()
		return nil, err
	}
	if err := writeLayering(w); err != nil {
		closeResources()
		return nil, err
	}
	if err := writeSession(w, s); err != nil {
		closeResources()
		return nil, err
	}
	if err := writeHeader(w); err != nil {
		closeResources()
		return nil, err
	}
	if err := writeClientMode(w); err != nil {
		closeResources()
		return nil, err
	}
	if err := w.Flush(); err != nil {
		closeResources()
		return nil, err
	}

	// pack pointer inside the struct to prevent excessive copying
	return &netConnTube{
		sess:       s,
		conn:       c,
		cborReader: cbor.NewReader(bufio.NewReader(c)),
		cborWriter: w,
	}, nil

}