/*
* $Id: PacketReader.cpp 54 2008-01-10 00:24:52Z mbroeker $
* $URL: http://localhost/svn/cpp/qMonitor/trunk/PacketReader.cpp $
*/
#include <cstdio>
#include <PacketReader.h>
PacketReader::PacketReader (int tm)
{
timeout = tm;
if ((p_socket = socket (PF_PACKET, SOCK_RAW, htons (ETH_P_ALL))) == -1) {
perror ("SocketException");
throw std::runtime_error ("SocketException: root access required");
}
}
PacketReader::PacketReader (std::string filename)
{
if ((p_socket = open (filename.c_str (), O_RDONLY)) == -1) {
throw std::runtime_error ("FileException");
}
timeout = -1;
}
PacketReader::~PacketReader ()
{
close (p_socket);
}
std::string PacketReader::read ()
{
static char s[IP_MAXPACKET + 1];
int c;
c =::read (p_socket, s, IP_MAXPACKET);
s[c] = 0;
return std::string (s, c);
}
bool PacketReader::ready ()
{
if (p_socket)
return true;
return false;
}
bool PacketReader::dataAvailable ()
{
pollfd fdin;
int event = 1;
fdin.fd = p_socket;
fdin.events = POLLIN;
fdin.revents = 0;
if (poll (&fdin, event, timeout) > 0)
return true;
return false;
}