# HG changeset patch # User Raj Bhattacharjea # Date 1214951154 14400 # Node ID e1313fb961eb2026771dab041cf02ee4ffe047fc # Parent 8e6ac6061680a9454d81b65e34be0a7279690bb9 Multitasking PacketSink diff -r 8e6ac6061680 -r e1313fb961eb examples/tcp-large-transfer.cc --- a/examples/tcp-large-transfer.cc Tue Jul 01 11:00:29 2008 -0700 +++ b/examples/tcp-large-transfer.cc Tue Jul 01 18:25:54 2008 -0400 @@ -132,6 +132,7 @@ int main (int argc, char *argv[]) ApplicationContainer apps = sink.Install (n1n2.Get (1)); apps.Start (Seconds (0.0)); + apps.Stop (Seconds (60.0)); // Create a source to send packets from n0. Instead of a full Application // and the helper APIs you might see in other example files, this example diff -r 8e6ac6061680 -r e1313fb961eb src/applications/packet-sink/packet-sink.cc --- a/src/applications/packet-sink/packet-sink.cc Tue Jul 01 11:00:29 2008 -0700 +++ b/src/applications/packet-sink/packet-sink.cc Tue Jul 01 18:25:54 2008 -0400 @@ -88,11 +88,17 @@ void PacketSink::StartApplication() / m_socket->SetRecvCallback (MakeCallback(&PacketSink::HandleRead, this)); m_socket->SetAcceptCallback ( MakeNullCallback, const Address &> (), - MakeNullCallback, const Address&> ()); + MakeCallback(&PacketSink::HandleAccept, this)); } void PacketSink::StopApplication() // Called at time specified by Stop { + while(!m_socketList.empty()) //these are accepted sockets, close them + { + Ptr acceptedSocket = m_socketList.front(); + m_socketList.pop_front(); + acceptedSocket->Close(); + } if (m_socket) { m_socket->SetRecvCallback (MakeNullCallback > ()); @@ -116,4 +122,9 @@ void PacketSink::HandleRead (Ptr } } +void PacketSink::HandleAccept (Ptr s, const Address& from) +{ + m_socketList.push_back(s); +} + } // Namespace ns3 diff -r 8e6ac6061680 -r e1313fb961eb src/applications/packet-sink/packet-sink.h --- a/src/applications/packet-sink/packet-sink.h Tue Jul 01 11:00:29 2008 -0700 +++ b/src/applications/packet-sink/packet-sink.h Tue Jul 01 18:25:54 2008 -0400 @@ -81,8 +81,10 @@ private: virtual void StopApplication (void); // Called at time specified by Stop void HandleRead (Ptr socket); + void HandleAccept (Ptr, const Address& from); Ptr m_socket; // Associated socket + std::list > m_socketList; //the accepted sockets Address m_local; // Local address to bind to TypeId m_tid; // Protocol TypeId TracedCallback, const Address &> m_rxTrace;