From 5de47cd21ff46aa312452d3b9eaaf5f7bb0a1f11 Mon Sep 17 00:00:00 2001 From: Josh Pelkey Date: Wed, 14 Apr 2010 16:31:55 -0400 Subject: [PATCH] Bug 876 - Tcp socket does not handle ShutdownRecv correctly --- src/internet-stack/tcp-socket-impl.cc | 19 ++++++++++++------- 1 file changed, 12 insertions(+), 7 deletions(-) diff --git a/src/internet-stack/tcp-socket-impl.cc b/src/internet-stack/tcp-socket-impl.cc index 3b59a9496..a618d6fb3 100644 --- a/src/internet-stack/tcp-socket-impl.cc +++ b/src/internet-stack/tcp-socket-impl.cc @@ -674,10 +674,6 @@ TcpSocketImpl::ForwardUp (Ptr packet, Ipv4Address saddr, Ipv4Address dad Address fromAddress = InetSocketAddress (saddr, port); Address toAddress = InetSocketAddress (daddr, m_endPoint->GetLocalPort()); - if (m_shutdownRecv) - { - return; - } TcpHeader tcpHeader; packet->RemoveHeader (tcpHeader); @@ -735,7 +731,10 @@ Actions_t TcpSocketImpl::ProcessEvent (Events_t e) if (saveState < CLOSING && (m_state == CLOSING || m_state == TIMED_WAIT) ) { NS_LOG_LOGIC ("TcpSocketImpl peer closing, send EOF to application"); - NotifyDataRecv (); + if (!m_shutdownRecv) + { + NotifyDataRecv (); + } } if (needCloseNotify && !m_closeNotified) @@ -1296,7 +1295,10 @@ void TcpSocketImpl::NewRx (Ptr p, m_rxAvailable += p->GetSize (); RxBufFinishInsert (tcpHeader.GetSequenceNumber ()); m_rxBufSize += p->GetSize (); - NotifyDataRecv (); + if (!m_shutdownRecv) + { + NotifyDataRecv (); + } if (m_closeNotified) { NS_LOG_LOGIC ("Tcp " << this << " HuH? Got data after closeNotif"); @@ -1392,7 +1394,10 @@ void TcpSocketImpl::NewRx (Ptr p, m_rxAvailable += p->GetSize (); m_rxBufSize += p->GetSize(); RxBufFinishInsert(start); - NotifyDataRecv (); + if (!m_shutdownRecv) + { + NotifyDataRecv (); + } } else { // debug