diff -urp src.orig/netserver.c src/netserver.c
--- src.orig/netserver.c	2009-05-28 05:48:44.000000000 +0800
+++ src/netserver.c	2010-05-22 11:43:40.000000000 +0800
@@ -580,7 +580,7 @@ set_up_server(char hostname[], char port
     if ((bind (server_control, 
 	       local_res_temp->ai_addr, 
 	       local_res_temp->ai_addrlen) != SOCKET_ERROR) &&
-	(listen (server_control,5) != SOCKET_ERROR))  {
+	(listen (server_control, 512) != SOCKET_ERROR))  {
       not_listening = 0;
       break;
     }
diff -urp src.orig/netsh.c src/netsh.c
--- src.orig/netsh.c	2008-10-25 07:38:57.000000000 +0800
+++ src/netsh.c	2010-05-22 11:44:29.000000000 +0800
@@ -94,7 +94,7 @@ double atof(const char *);
  /* Some of the args take optional parameters. Since we are using */
  /* getopt to parse the command line, we will tell getopt that they do */
  /* not take parms, and then look for them ourselves */
-#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"
+#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"
 
 /************************************************************************/
 /*									*/
@@ -186,6 +186,10 @@ int
   remote_interval_usecs,
   remote_interval_burst;
 
+/* wait time between control/data connection establishment and
+   start of data traffic 					*/
+int wait_time_secs;
+
 #if defined(WANT_INTERVALS) || defined(WANT_DEMO)
 
 int demo_mode;                    /* are we actually in demo mode? */
@@ -275,6 +279,7 @@ Global options:\n\
     -p port,lport*    Specify netserver port number and/or local port\n\
     -P 0|1            Don't/Do display test headers\n\
     -r                Allow confidence to be hit on result only\n\
+    -s time           Time to wait before starting data traffic\n\
     -t testname       Specify test to perform\n\
     -T lcpu,rcpu      Request netperf/netserver be bound to local/remote cpu\n\
     -v verbosity      Specify the verbosity level\n\
@@ -816,6 +821,9 @@ scan_cmd_line(int argc, char *argv[])
 	test_time = 0;
       }
       break;
+     case 's':
+      wait_time_secs  =  convert(optarg);
+      break;
     case 'v':
       /* say how much to say */
       verbosity = convert(optarg);
diff -urp src.orig/netsh.h src/netsh.h
--- src.orig/netsh.h	2008-02-20 06:48:52.000000000 +0800
+++ src/netsh.h	2010-05-22 11:44:32.000000000 +0800
@@ -91,6 +91,8 @@ extern int	
   test_bytes,		/* test ends on byte count		*/
   test_trans;		/* test ends on tran count		*/
 
+extern int wait_time_secs;
+
 /* the alignment conditions for the tests				*/
 extern int
   local_recv_align,	/* alignment for local receives		*/
diff -urp src.orig/nettest_bsd.c src/nettest_bsd.c
--- src.orig/nettest_bsd.c	2009-06-04 08:31:15.000000000 +0800
+++ src/nettest_bsd.c	2010-05-22 11:43:09.000000000 +0800
@@ -326,6 +326,12 @@ static struct timeval *temp_intvl_ptr = 
 #endif
 #endif
 
+#define WAIT_BEFORE_DATA_TRAFFIC() \
+{ \
+  if (wait_time_secs) \
+    sleep(wait_time_secs); \
+} \
+
 #ifdef WANT_DEMO
 #ifdef HAVE_GETHRTIME
 static hrtime_t demo_one;
@@ -1836,6 +1842,8 @@ Size (bytes)\n\
     /* we'll see it here. If it didn't, we might as well start pumping */
     /* data. */ 
     
+    WAIT_BEFORE_DATA_TRAFFIC();
+    
     /* Set-up the test end conditions. For a stream test, they can be */
     /* either time or byte-count based. */
     
@@ -2542,6 +2550,8 @@ Size (bytes)\n\
     /* we'll see it here. If it didn't, we might as well start pumping */
     /* data. */ 
     
+    WAIT_BEFORE_DATA_TRAFFIC();
+    
     /* Set-up the test end conditions. For a maerts test, they can be */
     /* either time or byte-count based. */
     
@@ -4195,7 +4205,7 @@ Size (bytes)\n\
     tcp_stream_request->cpu_rate	=	remote_cpu_rate;
 
     if (test_time) {
-      tcp_stream_request->test_length	=	test_time;
+      tcp_stream_request->test_length	=	test_time + wait_time_secs;
     }
     else {
       tcp_stream_request->test_length	=	test_bytes;
@@ -4286,6 +4296,8 @@ Size (bytes)\n\
        we'll see it here. If it didn't, we might as well start pumping
        data. */
     
+    WAIT_BEFORE_DATA_TRAFFIC();
+
     /* Set-up the test end conditions. For a stream test, they can be */
     /* either time or byte-count based. */
     
@@ -5715,7 +5727,7 @@ Send   Recv    Send   Recv    usec/Tran 
       tcp_rr_request->so_rcvavoid	=	rem_rcvavoid;
       tcp_rr_request->so_sndavoid	=	rem_sndavoid;
       if (test_time) {
-	tcp_rr_request->test_length	=	test_time;
+	tcp_rr_request->test_length	=	test_time + wait_time_secs;
       }
       else {
 	tcp_rr_request->test_length	=	test_trans * -1;
@@ -5777,6 +5789,8 @@ Send   Recv    Send   Recv    usec/Tran 
       
       exit(1);
     }
+
+    WAIT_BEFORE_DATA_TRAFFIC();
     
 #ifdef WIN32
     /* this is used so the timer thread can close the socket out from */
@@ -6501,6 +6515,8 @@ bytes   bytes    secs            #      
           fflush(where);
        }
     }
+
+    WAIT_BEFORE_DATA_TRAFFIC();
     
 #ifdef WIN32
   /* this is used so the timer thread can close the socket out from */
@@ -7375,7 +7391,7 @@ bytes  bytes  bytes   bytes  secs.   per
       udp_rr_request->so_rcvavoid	        = rem_rcvavoid;
       udp_rr_request->so_sndavoid	        = rem_sndavoid;
       if (test_time) {
-	udp_rr_request->test_length	= test_time;
+	udp_rr_request->test_length	= test_time + wait_time_secs;
       }
       else {
 	udp_rr_request->test_length	= test_trans * -1;
@@ -7456,6 +7472,8 @@ bytes  bytes  bytes   bytes  secs.   per
     /* message after the accept on the remote. If it failed, we'll see it */
     /* here. If it didn't, we might as well start pumping data. */
     
+    WAIT_BEFORE_DATA_TRAFFIC();
+
     /* Set-up the test end conditions. For a request/response test, they */
     /* can be either time or transaction based. */
 
@@ -8767,7 +8785,7 @@ Send   Recv    Send   Recv\n\
     tcp_conn_rr_request->so_rcvavoid	=	rem_rcvavoid;
     tcp_conn_rr_request->so_sndavoid	=	rem_sndavoid;
     if (test_time) {
-      tcp_conn_rr_request->test_length	=	test_time;
+      tcp_conn_rr_request->test_length	=	test_time + wait_time_secs;
     }
     else {
       tcp_conn_rr_request->test_length	=	test_trans * -1;
@@ -10961,7 +10979,7 @@ Send   Recv    Send   Recv\n\
     tcp_rr_request->so_rcvavoid	        =	rem_rcvavoid;
     tcp_rr_request->so_sndavoid	        =	rem_sndavoid;
     if (test_time) {
-      tcp_rr_request->test_length	=	test_time;
+      tcp_rr_request->test_length	=	test_time + wait_time_secs;
     }
     else {
       tcp_rr_request->test_length	=	test_trans * -1;
@@ -11038,6 +11056,8 @@ Send   Recv    Send   Recv\n\
     /* message after the accept on the remote. If it failed, we'll see it */
     /* here. If it didn't, we might as well start pumping data. */
     
+    WAIT_BEFORE_DATA_TRAFFIC();
+
     /* Set-up the test end conditions. For a request/response test, they */
     /* can be either time or transaction based. */
     
@@ -12021,6 +12041,8 @@ Send   Recv    Send   Recv\n\
   /* Set-up the test end conditions. For a request/response test, they */
   /* can be either time or transaction based. */
   
+  WAIT_BEFORE_DATA_TRAFFIC();
+
   if (test_time) {
     /* The user wanted to end the test after a period of time. */
     times_up = 0;
