X-Git-Url: http://g0dil.de/git?a=blobdiff_plain;f=Socket%2FProtocols%2FUN%2FUNProtocol.cc;h=c0bab258becb77150cc80316b0240b0092ad7438;hb=1ad3873b372da6187b1fbc645bf276287d2efb54;hp=4e48938b1681fc24ecaf948535b0521ab5b7d14f;hpb=171b7d9c23896219fc63a6c4a75fc86dfd4bb042;p=senf.git diff --git a/Socket/Protocols/UN/UNProtocol.cc b/Socket/Protocols/UN/UNProtocol.cc index 4e48938..c0bab25 100644 --- a/Socket/Protocols/UN/UNProtocol.cc +++ b/Socket/Protocols/UN/UNProtocol.cc @@ -38,8 +38,8 @@ prefix_ unsigned senf::UNProtocol::available() const { int n; - if (::ioctl(body().fd(),SIOCINQ,&n) < 0) - throw senf::SystemException(errno); + if (::ioctl(fd(),SIOCINQ,&n) < 0) + throwErrno(); return n; } @@ -52,15 +52,15 @@ prefix_ bool senf::UNProtocol::eof() prefix_ void senf::UNProtocol::connect(UNSocketAddress const & address) const { - if(::connect(body().fd(), address.sockaddr_p(), sizeof(sockaddr_un)) < 0) - throw SystemException(errno); + if(::connect(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) - throw SystemException(errno); + if(::bind(fd(), address.sockaddr_p(), sizeof(sockaddr_un)) < 0) + throwErrno(); } @@ -85,27 +85,35 @@ 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) { } } + +// // 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(fd(), (struct sockaddr *)&test, &len); +// if( r == 0 && ::strlen(test.sun_path) > 0){ +// ::unlink( test.sun_path); +// } ///////////////////////////////cc.e//////////////////////////////////////// #undef prefix_