code: func (c *Client) Read() (*Packet, *ethernet.Frame, error) {
  	buf := make([]byte, 128)
  	for {
  		n, _, err := c.p.ReadFrom(buf)
  		if err != nil {
  			return nil, nil, err
  		}
  
  		p, eth, err := parsePacket(buf[:n])
  		if err != nil {
  			if err == errInvalidARPPacket {
  				continue
  			}
  			return nil, nil, err
  		}
  		return p, eth, nil
  	}
  }
docs: // Read reads a single ARP packet and returns it, together with its
  // ethernet frame.