// $Id$
//
-// Copyright (C) 2007
+// Copyright (C) 2007
+// Fraunhofer Institute for Open Communication Systems (FOKUS)
+// Competence Center NETwork research (NET), St. Augustin, GERMANY
+// David Wagner <dw6@berlios.de>
//
// This program is free software; you can redistribute it and/or modify
// it under the terms of the GNU General Public License as published by
//#include "UNProtocol.ih"
// Custom includes
+#include <fstream>
#include <sys/socket.h>
+#include <sys/ioctl.h>
+#include <linux/sockios.h> // for SIOCINQ / SIOCOUTQ
#include "../../../Utils/Exception.hh"
//#include "UNProtocol.mpp"
#define prefix_
///////////////////////////////cc.p////////////////////////////////////////
-prefix_ void senf::UNProtocol::connect(UNSocketAddress const & address)
- const
+prefix_ unsigned senf::UNProtocol::available()
+ const
{
- if(::connect(body().fd(), address.sockaddr_p(), sizeof(address.sockaddr())) < 0)
- throw SystemException(errno);
+ int n;
+ if (::ioctl(fd(),SIOCINQ,&n) < 0)
+ throw SystemException();
+ return n;
}
-prefix_ void senf::UNProtocol::bind(UNSocketAddress const & address)
- const
+prefix_ bool senf::UNProtocol::eof()
+ const
{
- if(::bind(body().fd(), address.sockaddr_p(), sizeof(address.sockaddr())) < 0)
- throw SystemException(errno);
+ return false;
}
+prefix_ void senf::UNProtocol::close()
+ const
+{
+ check_and_unlink();
+
+ SocketProtocol::close();
+}
+prefix_ void senf::UNProtocol::terminate()
+ const
+{
+ check_and_unlink();
+
+ SocketProtocol::terminate();
+}
-
-
+prefix_ void senf::UNProtocol::check_and_unlink()
+ const
+{
+ typedef ClientSocketHandle<MakeSocketPolicy<UNAddressingPolicy>::policy> UNSocketHandle;
+ try {
+ UNSocketAddress una (static_socket_cast<UNSocketHandle>(fh()).local());
+ ::unlink(una.path().c_str());
+ }
+ catch (SystemException & e) {
+ }
+}
+
///////////////////////////////cc.e////////////////////////////////////////
#undef prefix_
//#include "UNProtocol.mpp"