docs: def read_packet(self, size=MTU):
          """Read blocks until it reaches either EOF or a packet, and
          returns None or (packet, (linktype, sec, usec, wirelen)),
          where packet is a string.
  
          """
          while True:
              try:
                  blocktype, blocklen = struct.unpack(self.endian + "2I",
                                                      self.f.read(8))
              except struct.error:
                  return None
              block = self.f.read(blocklen - 12)
              if blocklen % 4:
                  pad = self.f.read(4 - (blocklen % 4))
                  warning("PcapNg: bad blocklen %d (MUST be a multiple of 4. "
                          "Ignored padding %r" % (blocklen, pad))
              try:
                  if (blocklen,) != struct.unpack(self.endian + 'I',
                                                  self.f.read(4)):
                      warning("PcapNg: Invalid pcapng block (bad blocklen)")
              except struct.error:
                  return None
              res = self.blocktypes.get(blocktype,
                                        lambda block, size: None)(block, size)
              if res is not None:
                  return res