1diff -urp src.orig/netserver.c src/netserver.c 2--- src.orig/netserver.c 2009-05-28 05:48:44.000000000 +0800 3+++ src/netserver.c 2010-05-22 11:43:40.000000000 +0800 4@@ -580,7 +580,7 @@ set_up_server(char hostname[], char port 5 if ((bind (server_control, 6 local_res_temp->ai_addr, 7 local_res_temp->ai_addrlen) != SOCKET_ERROR) && 8- (listen (server_control,5) != SOCKET_ERROR)) { 9+ (listen (server_control, 512) != SOCKET_ERROR)) { 10 not_listening = 0; 11 break; 12 } 13diff -urp src.orig/netsh.c src/netsh.c 14--- src.orig/netsh.c 2008-10-25 07:38:57.000000000 +0800 15+++ src/netsh.c 2010-05-22 11:44:29.000000000 +0800 16@@ -94,7 +94,7 @@ double atof(const char *); 17 /* Some of the args take optional parameters. Since we are using */ 18 /* getopt to parse the command line, we will tell getopt that they do */ 19 /* not take parms, and then look for them ourselves */ 20-#define GLOBAL_CMD_LINE_ARGS "A:a:b:B:CcdDf:F:H:hi:I:k:K:l:L:n:NO:o:P:p:rt:T:v:VW:w:46" 21+#define GLOBAL_CMD_LINE_ARGS "A:a:b:B:CcdDf:F:H:hi:I:k:K:l:L:n:NO:o:P:p:rt:s:T:v:VW:w:46" 22 23 /************************************************************************/ 24 /* */ 25@@ -186,6 +186,10 @@ int 26 remote_interval_usecs, 27 remote_interval_burst; 28 29+/* wait time between control/data connection establishment and 30+ start of data traffic */ 31+int wait_time_secs; 32+ 33 #if defined(WANT_INTERVALS) || defined(WANT_DEMO) 34 35 int demo_mode; /* are we actually in demo mode? */ 36@@ -275,6 +279,7 @@ Global options:\n\ 37 -p port,lport* Specify netserver port number and/or local port\n\ 38 -P 0|1 Don't/Do display test headers\n\ 39 -r Allow confidence to be hit on result only\n\ 40+ -s time Time to wait before starting data traffic\n\ 41 -t testname Specify test to perform\n\ 42 -T lcpu,rcpu Request netperf/netserver be bound to local/remote cpu\n\ 43 -v verbosity Specify the verbosity level\n\ 44@@ -816,6 +821,9 @@ scan_cmd_line(int argc, char *argv[]) 45 test_time = 0; 46 } 47 break; 48+ case 's': 49+ wait_time_secs = convert(optarg); 50+ break; 51 case 'v': 52 /* say how much to say */ 53 verbosity = convert(optarg); 54diff -urp src.orig/netsh.h src/netsh.h 55--- src.orig/netsh.h 2008-02-20 06:48:52.000000000 +0800 56+++ src/netsh.h 2010-05-22 11:44:32.000000000 +0800 57@@ -91,6 +91,8 @@ extern int 58 test_bytes, /* test ends on byte count */ 59 test_trans; /* test ends on tran count */ 60 61+extern int wait_time_secs; 62+ 63 /* the alignment conditions for the tests */ 64 extern int 65 local_recv_align, /* alignment for local receives */ 66diff -urp src.orig/nettest_bsd.c src/nettest_bsd.c 67--- src.orig/nettest_bsd.c 2009-06-04 08:31:15.000000000 +0800 68+++ src/nettest_bsd.c 2010-05-22 11:43:09.000000000 +0800 69@@ -326,6 +326,12 @@ static struct timeval *temp_intvl_ptr = 70 #endif 71 #endif 72 73+#define WAIT_BEFORE_DATA_TRAFFIC() \ 74+{ \ 75+ if (wait_time_secs) \ 76+ sleep(wait_time_secs); \ 77+} \ 78+ 79 #ifdef WANT_DEMO 80 #ifdef HAVE_GETHRTIME 81 static hrtime_t demo_one; 82@@ -1836,6 +1842,8 @@ Size (bytes)\n\ 83 /* we'll see it here. If it didn't, we might as well start pumping */ 84 /* data. */ 85 86+ WAIT_BEFORE_DATA_TRAFFIC(); 87+ 88 /* Set-up the test end conditions. For a stream test, they can be */ 89 /* either time or byte-count based. */ 90 91@@ -2542,6 +2550,8 @@ Size (bytes)\n\ 92 /* we'll see it here. If it didn't, we might as well start pumping */ 93 /* data. */ 94 95+ WAIT_BEFORE_DATA_TRAFFIC(); 96+ 97 /* Set-up the test end conditions. For a maerts test, they can be */ 98 /* either time or byte-count based. */ 99 100@@ -4195,7 +4205,7 @@ Size (bytes)\n\ 101 tcp_stream_request->cpu_rate = remote_cpu_rate; 102 103 if (test_time) { 104- tcp_stream_request->test_length = test_time; 105+ tcp_stream_request->test_length = test_time + wait_time_secs; 106 } 107 else { 108 tcp_stream_request->test_length = test_bytes; 109@@ -4286,6 +4296,8 @@ Size (bytes)\n\ 110 we'll see it here. If it didn't, we might as well start pumping 111 data. */ 112 113+ WAIT_BEFORE_DATA_TRAFFIC(); 114+ 115 /* Set-up the test end conditions. For a stream test, they can be */ 116 /* either time or byte-count based. */ 117 118@@ -5715,7 +5727,7 @@ Send Recv Send Recv usec/Tran 119 tcp_rr_request->so_rcvavoid = rem_rcvavoid; 120 tcp_rr_request->so_sndavoid = rem_sndavoid; 121 if (test_time) { 122- tcp_rr_request->test_length = test_time; 123+ tcp_rr_request->test_length = test_time + wait_time_secs; 124 } 125 else { 126 tcp_rr_request->test_length = test_trans * -1; 127@@ -5777,6 +5789,8 @@ Send Recv Send Recv usec/Tran 128 129 exit(1); 130 } 131+ 132+ WAIT_BEFORE_DATA_TRAFFIC(); 133 134 #ifdef WIN32 135 /* this is used so the timer thread can close the socket out from */ 136@@ -6501,6 +6515,8 @@ bytes bytes secs # 137 fflush(where); 138 } 139 } 140+ 141+ WAIT_BEFORE_DATA_TRAFFIC(); 142 143 #ifdef WIN32 144 /* this is used so the timer thread can close the socket out from */ 145@@ -7375,7 +7391,7 @@ bytes bytes bytes bytes secs. per 146 udp_rr_request->so_rcvavoid = rem_rcvavoid; 147 udp_rr_request->so_sndavoid = rem_sndavoid; 148 if (test_time) { 149- udp_rr_request->test_length = test_time; 150+ udp_rr_request->test_length = test_time + wait_time_secs; 151 } 152 else { 153 udp_rr_request->test_length = test_trans * -1; 154@@ -7456,6 +7472,8 @@ bytes bytes bytes bytes secs. per 155 /* message after the accept on the remote. If it failed, we'll see it */ 156 /* here. If it didn't, we might as well start pumping data. */ 157 158+ WAIT_BEFORE_DATA_TRAFFIC(); 159+ 160 /* Set-up the test end conditions. For a request/response test, they */ 161 /* can be either time or transaction based. */ 162 163@@ -8767,7 +8785,7 @@ Send Recv Send Recv\n\ 164 tcp_conn_rr_request->so_rcvavoid = rem_rcvavoid; 165 tcp_conn_rr_request->so_sndavoid = rem_sndavoid; 166 if (test_time) { 167- tcp_conn_rr_request->test_length = test_time; 168+ tcp_conn_rr_request->test_length = test_time + wait_time_secs; 169 } 170 else { 171 tcp_conn_rr_request->test_length = test_trans * -1; 172@@ -10961,7 +10979,7 @@ Send Recv Send Recv\n\ 173 tcp_rr_request->so_rcvavoid = rem_rcvavoid; 174 tcp_rr_request->so_sndavoid = rem_sndavoid; 175 if (test_time) { 176- tcp_rr_request->test_length = test_time; 177+ tcp_rr_request->test_length = test_time + wait_time_secs; 178 } 179 else { 180 tcp_rr_request->test_length = test_trans * -1; 181@@ -11038,6 +11056,8 @@ Send Recv Send Recv\n\ 182 /* message after the accept on the remote. If it failed, we'll see it */ 183 /* here. If it didn't, we might as well start pumping data. */ 184 185+ WAIT_BEFORE_DATA_TRAFFIC(); 186+ 187 /* Set-up the test end conditions. For a request/response test, they */ 188 /* can be either time or transaction based. */ 189 190@@ -12021,6 +12041,8 @@ Send Recv Send Recv\n\ 191 /* Set-up the test end conditions. For a request/response test, they */ 192 /* can be either time or transaction based. */ 193 194+ WAIT_BEFORE_DATA_TRAFFIC(); 195+ 196 if (test_time) { 197 /* The user wanted to end the test after a period of time. */ 198 times_up = 0; 199