PcapPlusPlus  Next
RawSocketDevice.h
Go to the documentation of this file.
1 #pragma once
2 
4 
5 #include <memory>
6 #include "IpAddress.h"
7 #include "Device.h"
8 
11 namespace pcpp
12 {
38  class RawSocketDevice : public IDevice
39  {
40  public:
43  {
52  RecvError = 3
53  };
54 
60  explicit RawSocketDevice(const IPAddress& interfaceIP);
61 
64 
89  RecvPacketResult receivePacket(RawPacket& rawPacket, bool blocking = true, double timeout = -1);
90 
99  int receivePackets(RawPacketVector& packetVec, double timeout, int& failedRecv);
100 
108  bool sendPacket(const RawPacket* rawPacket);
109 
117  int sendPackets(const RawPacketVector& packetVec);
118 
119  // overridden methods
120 
123  bool open() override;
124 
126  void close() override;
127 
128  bool isOpened() const override
129  {
130  return m_DeviceOpened;
131  }
132 
133  private:
134  struct SocketContainer;
135 
136  enum SocketFamily
137  {
138  Ethernet = 0,
139  IPv4 = 1,
140  IPv6 = 2
141  };
142 
143  bool m_DeviceOpened = false;
144 
145  SocketFamily m_SockFamily;
146  std::unique_ptr<SocketContainer> m_Socket;
147  IPAddress m_InterfaceIP;
148 
149  RecvPacketResult getError(int& errorCode) const;
150  };
151 } // namespace pcpp
Definition: Device.h:20
Definition: IpAddress.h:318
Definition: PointerVector.h:50
Definition: RawPacket.h:290
Definition: RawSocketDevice.h:39
RecvPacketResult
An enum for reporting packet receive results.
Definition: RawSocketDevice.h:43
@ RecvTimeout
Receive timeout - timeout expired without any packets being captured.
Definition: RawSocketDevice.h:47
@ RecvWouldBlock
Definition: RawSocketDevice.h:50
@ RecvSuccess
Receive success.
Definition: RawSocketDevice.h:45
@ RecvError
Receive error, usually will be followed by an error log.
Definition: RawSocketDevice.h:52
int receivePackets(RawPacketVector &packetVec, double timeout, int &failedRecv)
~RawSocketDevice()
A d'tor for this class. It closes the raw socket if not previously closed by calling close()
int sendPackets(const RawPacketVector &packetVec)
bool sendPacket(const RawPacket *rawPacket)
bool isOpened() const override
Definition: RawSocketDevice.h:128
RecvPacketResult receivePacket(RawPacket &rawPacket, bool blocking=true, double timeout=-1)
RawSocketDevice(const IPAddress &interfaceIP)
void close() override
Close the raw socket.
bool open() override
const ProtocolType Ethernet
Ethernet protocol.
Definition: ProtocolType.h:45
const ProtocolType IPv4
IPv4 protocol.
Definition: ProtocolType.h:48
const ProtocolType IPv6
IPv6 protocol.
Definition: ProtocolType.h:51
The main namespace for the PcapPlusPlus lib.
Definition: AssertionUtils.h:19