Utils: Removed ErrnoException and implemented generic Exception base-class
[senf.git] / Socket / Protocols / UN / UNProtocol.cc
index 7e2f49e..f86458c 100644 (file)
@@ -1,7 +1,9 @@
-// Copyright (C) 2007 
-// Fraunhofer Institut fuer offene Kommunikationssysteme (FOKUS)
-// Kompetenzzentrum NETwork research (NET)
-//     David Wagner <david.wagner@fokus.fraunhofer.de>
+// $Id$
+//
+// 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
@@ -38,8 +40,8 @@ prefix_ unsigned senf::UNProtocol::available()
     const
 {
     int n;
-    if (::ioctl(body().fd(),SIOCINQ,&n) < 0)
-        throwErrno();
+    if (::ioctl(fd(),SIOCINQ,&n) < 0)
+        throw SystemException();
     return n;
 }
 
@@ -49,23 +51,6 @@ prefix_ bool senf::UNProtocol::eof()
     return false;
 }
 
-prefix_ void senf::UNProtocol::connect(UNSocketAddress const & address) 
-    const 
-{
-    if(::connect(body().fd(), address.sockaddr_p(), sizeof(sockaddr_un)) < 0)
-        throwErrno();
-}
-
-prefix_ void senf::UNProtocol::bind(UNSocketAddress const & address) 
-    const 
-{
-    if(::bind(body().fd(), address.sockaddr_p(), sizeof(sockaddr_un)) < 0)
-        throwErrno();
-    
-}
-
-
-
 prefix_ void senf::UNProtocol::close() 
     const
 {
@@ -85,28 +70,15 @@ prefix_ void senf::UNProtocol::terminate()
 prefix_ void senf::UNProtocol::check_and_unlink()
     const
 {
-//  struct sockaddr_un test;
-//  socklen_t len;
-//  memset( (char*)&test, 0xff, sizeof( test));
-//  int fd = inputSocket.fd() ;
-////    printf( "fd: %d\n", fd);
-//
-//  int r = getsockname( fd, (struct sockaddr *)&test, &len);
-//  if( r < 0){
-//    perror( "bla:");
-//  }
-//  else{
-//    printf( "name: %d %d %s\n", r, len , test.sun_path);
-//    unsigned char *p = (unsigned char*) &test;for( r=0; r< len; r++) printf( "%2.2x ", (int)(p[r])); printf ("\n");
-//  }
-    struct sockaddr_un test;
-    socklen_t len = sizeof( test);
-    int r = ::getsockname( body().fd(), (struct sockaddr *)&test, &len);
-    if( r == 0 && ::strlen(test.sun_path) > 0){
-      ::unlink( test.sun_path);
+    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"