X-Git-Url: http://g0dil.de/git?a=blobdiff_plain;f=Socket%2FProtocols%2FINet%2FConnectedRawINetSocketHandle.cc;h=47ca1e1716bc96a29d6bb58bd4a9e68127fdb1e0;hb=164fe477094d42463722584e527a02379ab5d985;hp=6e4038cae0724d9a2acd7a5bda4434eb2ee17803;hpb=1d247d12d1759ffd77f456efe3a52f03dd289994;p=senf.git diff --git a/Socket/Protocols/INet/ConnectedRawINetSocketHandle.cc b/Socket/Protocols/INet/ConnectedRawINetSocketHandle.cc index 6e4038c..47ca1e1 100644 --- a/Socket/Protocols/INet/ConnectedRawINetSocketHandle.cc +++ b/Socket/Protocols/INet/ConnectedRawINetSocketHandle.cc @@ -48,7 +48,7 @@ senf::ConnectedRawV4SocketProtocol::init_client(int const & protocol) { int sock = ::socket(PF_INET, SOCK_RAW, protocol); if (sock < 0) - throw SystemException(); + SENF_THROW_SYSTEM_EXCEPTION(""); fd(sock); } @@ -74,7 +74,7 @@ prefix_ void senf::ConnectedRawV6SocketProtocol::init_client(int const & protoco { int sock = ::socket(PF_INET6,SOCK_RAW,protocol); if (sock < 0) - throw SystemException(); + SENF_THROW_SYSTEM_EXCEPTION(""); fd(sock); } @@ -83,7 +83,10 @@ senf::ConnectedRawV6SocketProtocol::init_client(int const & protocol, INet6Socke const { init_client(protocol); - clientHandle().connect(address); + if(address.boolean_test()) { + //only connect if socket is not [::]:0, this results in an irreversible binding to the lo interface (linux 2.6.15) + clientHandle().connect(address); + } } ///////////////////////////////cc.e////////////////////////////////////////