delay tearing down tcp control connections

The TEST_END message is racing with the server_timer_proc timer.
When the RTT is higher than a second, the timer wins the race
and closes the control socket before the results are exchanged.

This results in the client reporting:
"error - control socket has closed unexpectedly"
as reported in GH issue 751.

This change doesn't prevent the race, but significantly increases the
grace period based on a maximum RTT of 4 seconds and accounts for
the ten transitions in the iperf3 state machine.

(cherry picked from commit 34bdddb75194e880e6dbc6dcaa5b5386975c11b3)
(originally submitted by @acooks in #859)
diff --git a/src/iperf_server_api.c b/src/iperf_server_api.c
index 56cab4b..40d99bc 100644
--- a/src/iperf_server_api.c
+++ b/src/iperf_server_api.c
@@ -270,6 +270,9 @@
 {
     struct iperf_time now;
     TimerClientData cd;
+    int max_rtt = 4; /* seconds */
+    int state_transitions = 10; /* number of state transitions in iperf3 */
+    int grace_period = max_rtt * state_transitions;
 
     if (iperf_time_now(&now) < 0) {
 	i_errno = IEINITTEST;
@@ -279,7 +282,7 @@
     test->timer = test->stats_timer = test->reporter_timer = NULL;
     if (test->duration != 0 ) {
         test->done = 0;
-        test->timer = tmr_create(&now, server_timer_proc, cd, (test->duration + test->omit + 5) * SEC_TO_US, 0);
+        test->timer = tmr_create(&now, server_timer_proc, cd, (test->duration + test->omit + grace_period) * SEC_TO_US, 0);
         if (test->timer == NULL) {
             i_errno = IEINITTEST;
             return -1;