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