zms123456 1 год назад
Родитель
Сommit
450d6b7015
1 измененных файлов с 26 добавлено и 2 удалено
  1. 26 2
      iperf/iperf.c

+ 26 - 2
iperf/iperf.c

@@ -48,8 +48,10 @@ static void iperf_udp_client(void *thread_param)
     rt_uint32_t *buffer;
     struct sockaddr_in server;
     rt_uint32_t packet_count = 0;
-    rt_uint32_t tick;
+    rt_uint32_t tick, tick1, tick2;
     int send_size;
+    int ret;
+    rt_uint64_t sentlen = 0;
 
     send_size = IPERF_BUFSZ > 1470 ? 1470 : IPERF_BUFSZ;
     buffer = rt_malloc(IPERF_BUFSZ);
@@ -69,6 +71,7 @@ static void iperf_udp_client(void *thread_param)
     server.sin_port = htons(param.port);
     server.sin_addr.s_addr = inet_addr(param.host);
     LOG_I("iperf udp mode run...");
+    tick1 = rt_tick_get();
     while (param.mode != IPERF_MODE_STOP)
     {
         packet_count++;
@@ -76,7 +79,28 @@ static void iperf_udp_client(void *thread_param)
         buffer[0] = htonl(packet_count);
         buffer[1] = htonl(tick / RT_TICK_PER_SECOND);
         buffer[2] = htonl((tick % RT_TICK_PER_SECOND) * 1000);
-        sendto(sock, buffer, send_size, 0, (struct sockaddr *)&server, sizeof(struct sockaddr_in));
+        ret = sendto(sock, buffer, send_size, 0, (struct sockaddr *)&server, sizeof(struct sockaddr_in));
+        if (ret > 0)
+        {
+            sentlen += ret;
+        }
+        if (ret < 0) break;
+
+        tick2 = rt_tick_get();
+        if (tick2 - tick1 >= RT_TICK_PER_SECOND * 5)
+        {
+            long data;
+            int integer, decimal;
+            rt_thread_t tid;
+
+            tid = rt_thread_self();
+            data = sentlen * RT_TICK_PER_SECOND / 125 / (tick2 - tick1);
+            integer = data/1000;
+            decimal = data%1000;
+            LOG_I("%s: %d.%03d0 Mbps!", IPERF_GET_THREAD_NAME(tid), integer, decimal);
+            tick1 = tick2;
+            sentlen = 0;
+        }
     }
     closesocket(sock);
     rt_free(buffer);