code: func (upc *UDPPacketConn) ReadFrom(b []byte) (int, net.Addr, error) {
  	ipLen := IPv4MaximumHeaderSize
  	udpLen := UDPMinimumSize
  
  	for {
  		pkt := make([]byte, ipLen+udpLen+len(b))
  		n, _, err := upc.PacketConn.ReadFrom(pkt)
  		if err != nil {
  			return 0, nil, err
  		}
  		pkt = pkt[:n]
  		buf := uio.NewBigEndianBuffer(pkt)
  
  		// To read the header length, access data directly.
  		ipHdr := IPv4(buf.Data())
  		ipHdr = IPv4(buf.Consume(int(ipHdr.HeaderLength())))
  
  		if ipHdr.TransportProtocol() != UDPProtocolNumber {
  			continue
  		}
  		udpHdr := UDP(buf.Consume(udpLen))
  
  		addr := &net.UDPAddr{
  			IP:   net.IP(ipHdr.DestinationAddress()),
  			Port: int(udpHdr.DestinationPort()),
  		}
  		if !udpMatch(addr, upc.boundAddr) {
  			continue
  		}
  		return copy(b, buf.ReadAll()), addr, nil
  	}
  }
docs: // ReadFrom implements net.PacketConn.ReadFrom.
  //
  // ReadFrom reads raw IP packets and will try to match them against
  // upc.boundAddr. Any matching packets are returned via the given buffer.