-// $Id: PacketSocketHandle.cc 358 2007-07-27 12:14:51Z g0dil $
+// $Id$
//
// Copyright (C) 2006
// Fraunhofer Institut fuer offene Kommunikationssysteme (FOKUS)
{
int fd;
if ( (fd = ::open("/dev/net/tun", O_RDWR)) < 0 )
- throw SystemException(errno);
+ throwErrno();
struct ifreq ifr;
::memset( &ifr, 0, sizeof(ifr));
ifr.ifr_flags = IFF_TAP;
ifr.ifr_flags |= IFF_NO_PI;
interface_name.copy( ifr.ifr_name, IFNAMSIZ);
if (::ioctl(fd, TUNSETIFF, (void *) &ifr) < 0 )
- throw SystemException(errno);
+ throwErrno();
body().fd(fd);
}
}
prefix_ unsigned senf::TapProtocol::available()
- const
+ const
+{
+ if (! body().readable())
+ return 0;
+ ssize_t l = ::recv(body().fd(),0,0,MSG_PEEK | MSG_TRUNC);
+ if (l < 0)
+ //throwErrno();
+ return 1588;
+ return l;
+}
+
+/*
+#include <linux/sockios.h> // for SIOCINQ / SIOCOUTQ
+
+prefix_ unsigned senf::TapProtocol::available()
+ const
{
- if (! body().readable())
- return 0;
- ssize_t l = ::recv(body().fd(),0,0,MSG_PEEK | MSG_TRUNC);
- if (l < 0)
- throw SystemException(errno);
- return l;
+ if (! body().readable())
+ return 0;
+ int n;
+ if (::ioctl(body().fd(),SIOCINQ,&n) < 0)
+ throwErrno();
+ return n;
}
+*/
prefix_ bool senf::TapProtocol::eof()
const