{
trk.session->update_paws_timestamps(tsd);
trk.session->check_for_window_slam(tsd);
+
+ // Handle getting stuck in CLOSED/FIN_WAIT on simultaneous close (FIN FIN ACK ACK)
+ if ( trk.get_tcp_event() != TcpStreamTracker::TCP_FIN_RECV_EVENT )
+ {
+ if ( ( trk.session->get_talker_state() == TcpStreamTracker::TCP_CLOSED ) &&
+ ( trk.session->get_listener_state() == TcpStreamTracker::TCP_TIME_WAIT ) )
+ {
+ Flow* flow = tsd.get_flow();
+ trk.session->clear_session(false, true, false, tsd.get_pkt() );
+ flow->session_state |= STREAM_STATE_CLOSED;
+ trk.session->set_pkt_action_flag(ACTION_LWSSN_CLOSED);
+ }
+ }
+
return true;
}