vcl/ldp: add write msg function and fine tuning
[vpp.git] / src / vnet / tcp / tcp.c
index 564f200..7f6a087 100644 (file)
@@ -284,7 +284,8 @@ tcp_connection_reset (tcp_connection_t * tc)
       break;
     case TCP_STATE_SYN_SENT:
       session_stream_connect_notify (&tc->connection, 1 /* fail */ );
-      tcp_connection_cleanup (tc);
+      tcp_connection_set_state (tc, TCP_STATE_CLOSED);
+      tcp_timer_set (tc, TCP_TIMER_WAITCLOSE, TCP_CLEANUP_TIME);
       break;
     case TCP_STATE_ESTABLISHED:
       tcp_connection_timers_reset (tc);
@@ -307,6 +308,7 @@ tcp_connection_reset (tcp_connection_t * tc)
       tcp_connection_set_state (tc, TCP_STATE_CLOSED);
       break;
     case TCP_STATE_CLOSED:
+    case TCP_STATE_TIME_WAIT:
       break;
     default:
       TCP_DBG ("reset state: %u", tc->state);
@@ -1293,9 +1295,9 @@ tcp_timer_waitclose_handler (u32 conn_index)
           * is closed. We haven't sent everything but we did try. */
          tcp_cong_recovery_off (tc);
          tcp_send_fin (tc);
-         rto = clib_max (tc->rto >> tc->rto_boff, 1);
+         rto = clib_max ((tc->rto >> tc->rto_boff) * TCP_TO_TIMER_TICK, 1);
          tcp_timer_set (tc, TCP_TIMER_WAITCLOSE,
-                        clib_min (rto * TCP_TO_TIMER_TICK, TCP_2MSL_TIME));
+                        clib_min (rto, TCP_2MSL_TIME));
          session_transport_closed_notify (&tc->connection);
        }
       else