X-Git-Url: http://g0dil.de/git?a=blobdiff_plain;f=Socket%2FProtocols%2FUN%2FUNProtocol.cc;h=507457fcb1dbf8e106ef023b6b57624a87d60d65;hb=6f50bf49e282c0528f51faa0a245bbfa2b867399;hp=7e2f49ebf8ce59691aff1c5aa17135c8fda56fab;hpb=34378cabd0ef59515f60b8e535d50fd5488c84e2;p=senf.git diff --git a/Socket/Protocols/UN/UNProtocol.cc b/Socket/Protocols/UN/UNProtocol.cc index 7e2f49e..507457f 100644 --- a/Socket/Protocols/UN/UNProtocol.cc +++ b/Socket/Protocols/UN/UNProtocol.cc @@ -1,7 +1,9 @@ +// $Id$ +// // Copyright (C) 2007 -// Fraunhofer Institut fuer offene Kommunikationssysteme (FOKUS) -// Kompetenzzentrum NETwork research (NET) -// David Wagner +// Fraunhofer Institute for Open Communication Systems (FOKUS) +// Competence Center NETwork research (NET), St. Augustin, GERMANY +// David Wagner // // 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,7 +40,7 @@ prefix_ unsigned senf::UNProtocol::available() const { int n; - if (::ioctl(body().fd(),SIOCINQ,&n) < 0) + if (::ioctl(fd(),SIOCINQ,&n) < 0) throwErrno(); 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::policy> UNSocketHandle; + try { + UNSocketAddress una (static_socket_cast(fh()).local()); + ::unlink(una.path().c_str()); + } + catch (SystemException & e) { } } - + ///////////////////////////////cc.e//////////////////////////////////////// #undef prefix_ //#include "UNProtocol.mpp"