// $Id: ConnectedRawINetSocketHandle.cc 597 2008-01-15 09:16:20Z g0dil $
//
-// Copyright (C) 2007
-// Fraunhofer Institute for Open Communication Systems (FOKUS)
-// Competence Center NETwork research (NET), St. Augustin, GERMANY
+// 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
{
int sock = ::socket(PF_INET, SOCK_RAW, protocol);
if (sock < 0)
- throwErrno();
+ SENF_THROW_SYSTEM_EXCEPTION("");
fd(sock);
}
clientHandle().connect(address);
}
-prefix_ std::auto_ptr<senf::SocketProtocol> senf::ConnectedRawV4SocketProtocol::clone()
- const
-{
- return std::auto_ptr<SocketProtocol>(new ConnectedRawV4SocketProtocol());
-}
-
///////////////////////////////////////////////////////////////////////////
// senf::UDPv6SocketProtocol::
{
int sock = ::socket(PF_INET6,SOCK_RAW,protocol);
if (sock < 0)
- throwErrno();
+ SENF_THROW_SYSTEM_EXCEPTION("");
fd(sock);
}
const
{
init_client(protocol);
- clientHandle().connect(address);
-}
-
-prefix_ std::auto_ptr<senf::SocketProtocol> senf::ConnectedRawV6SocketProtocol::clone()
- const
-{
- return std::auto_ptr<SocketProtocol>(new ConnectedRawV6SocketProtocol());
+ 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////////////////////////////////////////