internal static extern int pcap_next_ex(PcapHandle p, ref pcap_pkthdr header, ref IntPtr dataPtr);
private Packet ReadPacketWithoutBusyCheck() { ThrowIfDisposed(); while (true) { var header = new pcap_pkthdr(); var dataPtr = IntPtr.Zero; int result = NativeMethods.pcap_next_ex(handle, ref header, ref dataPtr); // throw on error if (result == ReturnValue.Error) handle.ThrowLastError(); // check for EOF if (result == ReturnValue.EOF) return null; // try again on timeout if (result == 0) continue; var buffer = new byte[header.DataLength]; Marshal.Copy(dataPtr, buffer, 0, header.DataLength); return new Packet { Data = buffer, NativeTimestamp = header.Timestamp, LinkLayerType = linkLayerType, }; } }
internal static extern void pcap_dump(PcapDumperHandle p, pcap_pkthdr header, byte[] data);