code: func (c *Conn) Read(sdu []byte) (n int, err error) {
  	p, ok := <-c.chInPDU
  	if !ok {
  		return 0, errors.Wrap(io.ErrClosedPipe, "input channel closed")
  	}
  	if len(p) == 0 {
  		return 0, errors.Wrap(io.ErrUnexpectedEOF, "recieved empty packet")
  	}
  
  	// Assume it's a B-Frame.
  	slen := p.dlen()
  	data := p.payload()
  	if c.leFrame {
  		// LE-Frame.
  		slen = leFrameHdr(p).slen()
  		data = leFrameHdr(p).payload()
  	}
  	if cap(sdu) < slen {
  		return 0, errors.Wrapf(io.ErrShortBuffer, "payload recieved exceeds sdu buffer")
  	}
  	buf := bytes.NewBuffer(sdu)
  	buf.Reset()
  	buf.Write(data)
  	for buf.Len() < slen {
  		p := <-c.chInPDU
  		buf.Write(pdu(p).payload())
  	}
  	return slen, nil
  }
docs: // Read copies re-assembled L2CAP PDUs into sdu.