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
}