code: def recv(self, bufsize=DEFAULT_PACKET_BUFFER_SIZE):
          
          if self._handle is None:
              raise RuntimeError("WinDivert handle is not open")
  
          packet = bytearray(bufsize)
          packet_ = (c_char * bufsize).from_buffer(packet)
          address = windivert_dll.WinDivertAddress()
          recv_len = c_uint(0)
          windivert_dll.WinDivertRecv(self._handle, packet_, bufsize, byref(address), byref(recv_len))
          return Packet(
              memoryview(packet)[:recv_len.value],
              (address.IfIdx, address.SubIfIdx),
              Direction(address.Direction)
          )
docs: Receives a diverted packet that matched the filter.
  
          The remapped function is WinDivertRecv::
  
              BOOL WinDivertRecv(
                  __in HANDLE handle,
                  __out PVOID pPacket,
                  __in UINT packetLen,
                  __out_opt PWINDIVERT_ADDRESS pAddr,
                  __out_opt UINT *recvLen
              );
  
          For more info on the C call visit: http://reqrypt.org/windivert-doc.html#divert_recv
  
          :return: The return value is a `pydivert.Packet`.