code: func receiveMessages(c net.PacketConn, mtu int) {
  	var f ethernet.Frame
  	b := make([]byte, mtu)
  
  	// Keep receiving messages forever.
  	for {
  		n, addr, err := c.ReadFrom(b)
  		if err != nil {
  			log.Fatalf("failed to receive message: %v", err)
  		}
  
  		// Unpack Ethernet II frame into Go representation.
  		if err := (&f).UnmarshalBinary(b[:n]); err != nil {
  			log.Fatalf("failed to unmarshal ethernet frame: %v", err)
  		}
  
  		// Display source of message and message itself.
  		log.Printf("[%s] %s", addr.String(), string(f.Payload))
  	}
  }
docs: // receiveMessages continuously receives messages over a connection. The messages
  // may be up to the interface's MTU in size.