// $Id$
//
// Copyright (C) 2006
-// Fraunhofer Institute for Open Communication Systems (FOKUS)
-// Competence Center NETwork research (NET), St. Augustin, GERMANY
+// Fraunhofer Institute for Open Communication Systems (FOKUS)
+// Competence Center NETwork research (NET), St. Augustin, GERMANY
// Stefan Bund <g0dil@berlios.de>
//
// This program is free software; you can redistribute it and/or modify
namespace {
class MySocketHandle
- : public senf::SocketHandle<senf::test::SomeProtocol::Policy>
+ : public senf::SocketHandle<senf::test::SomeSocketProtocol::Policy>
{
public:
MySocketHandle()
- : senf::SocketHandle<senf::test::SomeProtocol::Policy>(
+ : senf::SocketHandle<senf::test::SomeSocketProtocol::Policy>(
std::auto_ptr<senf::SocketBody>(
- new senf::ProtocolSocketBody<senf::test::SomeProtocol>(false)))
+ new senf::ProtocolSocketBody<senf::test::SomeSocketProtocol>(false, 0)))
{}
};
>::policy OtherSocketPolicy;
typedef senf::SocketHandle<OtherSocketPolicy> OtherSocketHandle;
- MySocketHandle myh;
- OtherSocketHandle osh (myh);
- osh = myh;
-
- typedef senf::SocketHandle<senf::test::SomeProtocol::Policy> SomeSocketHandle;
- SomeSocketHandle ssh = senf::static_socket_cast<SomeSocketHandle>(osh);
-
- BOOST_CHECK_NO_THROW( senf::dynamic_socket_cast<SomeSocketHandle>(osh) );
-
- typedef senf::SocketHandle< senf::MakeSocketPolicy<
- OtherSocketPolicy,
- senf::NoAddressingPolicy
- >::policy> SomeOtherSocketHandle;
-
- BOOST_CHECK_THROW( senf::dynamic_socket_cast<SomeOtherSocketHandle>(osh),
- std::bad_cast );
- BOOST_CHECK_THROW( senf::dynamic_socket_cast<SomeSocketHandle>(
- senf::FileHandle(FDHandle())),
- std::bad_cast );
-
- BOOST_CHECK_EQUAL( myh.dumpState(),
- "file.handle: -1\n"
- "file.refcount: 3\n"
- "handle: senf::SocketHandle<senf::SocketPolicy<senf::test::SomeAddressingPolicy, senf::test::SomeFramingPolicy, senf::test::SomeCommunicationPolicy, senf::test::SomeReadPolicy, senf::test::SomeWritePolicy> >\n"
- "socket.protocol: senf::test::SomeProtocol\n"
- "socket.protocol.policy: senf::SocketPolicy<senf::test::SomeAddressingPolicy, senf::test::SomeFramingPolicy, senf::test::SomeCommunicationPolicy, senf::test::SomeReadPolicy, senf::test::SomeWritePolicy>\n"
- "socket.server: false\n" );
+ {
+ MySocketHandle myh;
+ OtherSocketHandle osh (myh);
+ osh = myh;
+
+ typedef senf::SocketHandle<senf::test::SomeSocketProtocol::Policy> SomeSocketHandle;
+ SomeSocketHandle ssh = senf::static_socket_cast<SomeSocketHandle>(osh);
+
+ BOOST_CHECK_NO_THROW( senf::dynamic_socket_cast<SomeSocketHandle>(osh) );
+
+ typedef senf::SocketHandle< senf::MakeSocketPolicy<
+ OtherSocketPolicy,
+ senf::NoAddressingPolicy
+ >::policy> SomeOtherSocketHandle;
+
+ BOOST_CHECK_THROW( senf::dynamic_socket_cast<SomeOtherSocketHandle>(osh),
+ std::bad_cast );
+ BOOST_CHECK_THROW( senf::dynamic_socket_cast<SomeSocketHandle>(
+ senf::FileHandle(FDHandle())),
+ std::bad_cast );
+
+ BOOST_CHECK_EQUAL( myh.dumpState(),
+ "file.handle: 0\n"
+ "file.refcount: 3\n"
+ "handle: senf::SocketHandle<senf::SocketPolicy<senf::test::SomeAddressingPolicy, senf::test::SomeFramingPolicy, senf::test::SomeCommunicationPolicy, senf::test::SomeReadPolicy, senf::test::SomeWritePolicy> >\n"
+ "socket.protocol: senf::test::SomeSocketProtocol\n"
+ "socket.protocol.policy: senf::SocketPolicy<senf::test::SomeAddressingPolicy, senf::test::SomeFramingPolicy, senf::test::SomeCommunicationPolicy, senf::test::SomeReadPolicy, senf::test::SomeWritePolicy>\n"
+ "socket.server: false\n" );
+ }
+
+ // Ensure, the destructor is called and calls the correct close() implementation
+ BOOST_CHECK_EQUAL( senf::test::SomeSocketProtocol::closeCount(), 1u );
}
///////////////////////////////cc.e////////////////////////////////////////