code: func (s *Scanner) Scan() bool {
  	var l int
  	l, s.err = s.readPayloadLen()
  	if s.err == io.EOF {
  		s.err = nil
  		return false
  	}
  	if s.err != nil {
  		return false
  	}
  
  	if cap(s.payload) < l {
  		s.payload = make([]byte, 0, l)
  	}
  
  	if _, s.err = io.ReadFull(s.r, s.payload[:l]); s.err != nil {
  		return false
  	}
  	s.payload = s.payload[:l]
  
  	return true
  }
docs: // Scan advances the Scanner to the next pkt-line, whose payload will
  // then be available through the Bytes method.  Scanning stops at EOF
  // or the first I/O error.  After Scan returns false, the Err method
  // will return any error that occurred during scanning, except that if
  // it was io.EOF, Err will return nil.