changeset 513:75bb10dfa0df

Slight improvement in UDP throughput testing.
author gthomas
date Mon, 20 Jan 2003 11:14:37 +0000
parents 86bfbf46eeba
children 84fbdcadcb5f
files packages/net/common/current/ChangeLog packages/net/common/current/tests/nc_test_slave.c
diffstat 2 files changed, 23 insertions(+), 6 deletions(-) [+]
line wrap: on
line diff
--- a/packages/net/common/current/ChangeLog
+++ b/packages/net/common/current/ChangeLog
@@ -1,3 +1,9 @@
+2003-01-20  Gary Thomas  <gary@mlbassoc.com>
+
+	* tests/nc_test_slave.c: Improve handling of UDP buffer space - try
+	to minimize amount of "idle" time when this occurs.  Since this test
+	is just for show, these changes just make the numbers "look" better.
+
 2003-01-18  Jonathan Larmour  <jifl@eCosCentric.com>
 
 	* src/network_support.c (init_all_network_interfaces): Define buf
--- a/packages/net/common/current/tests/nc_test_slave.c
+++ b/packages/net/common/current/tests/nc_test_slave.c
@@ -210,25 +210,36 @@ do_udp_test(int s1, struct nc_request *r
             }
         }
         if (need_send) {
+            int retries = 10;
+            bool sent = false;
+            int res;
+
             tdp = (struct nc_test_data *)out_buf;
             tdp->key1 = htonl(NC_TEST_DATA_KEY1);
             tdp->key2 = htonl(NC_TEST_DATA_KEY2);
             tdp->seq = htonl(seq);
             td_len = ntohl(req->buflen) + sizeof(struct nc_test_data);
             tdp->len = htonl(td_len);
-            if (sendto(s, tdp, td_len, 0, 
-                       (struct sockaddr *)&test_chan_master, sizeof(test_chan_master)) < 0) {
-                perror("sendto");
+            while (!sent && (--retries >= 0)) {
+                res = sendto(s, tdp, td_len, 0, 
+                             (struct sockaddr *)&test_chan_master, sizeof(test_chan_master));
+                if (res > 0) {
+                    sent = true;
+                    break;
+                }
                 if (errno == ENOBUFS) {
                     // Saturated the system
-                    test_delay(10);   // Time for 200 500 byte 10-baseT packets 
+                    test_delay(1);   // Time for 200 500 byte 10-baseT packets 
                 } else {
                     // What else to do?
                     close(s);
                     return;
                 }
+            }
+            if (sent) {
+                nsent++;
             } else {
-                nsent++;
+                perror("sendto");
             }
         }
         seq++;
@@ -240,7 +251,7 @@ do_udp_test(int s1, struct nc_request *r
     results.nrecvd = htonl(nrecvd);
     if (sendto(s, &results, sizeof(results), 0, 
                (struct sockaddr *)&test_chan_master, sizeof(test_chan_master)) < 0) {
-        perror("sendto");
+        perror("sendto results");
     }
     close(s);
 }