]> git.feebdaed.xyz Git - linuxyz.git/commitdiff
iperf ready
authorseantywork <seantywork@gmail.com>
Fri, 16 May 2025 15:14:34 +0000 (15:14 +0000)
committerseantywork <seantywork@gmail.com>
Fri, 16 May 2025 15:14:34 +0000 (15:14 +0000)
iperf/2505-03.xyz.md
iperf/iperf_s.c
iperf/setup.sh [new file with mode: 0755]
iperf/test.sh [deleted file]

index b971d0dd6d95bbe4e10a966f0878d6568b8ecf90..99e5f8278e13fcb46c623eb77bc2ab3b92344cdb 100644 (file)
@@ -289,4 +289,12 @@ static uint8_t ctl_start_2[1] = {0x02};
 static uint8_t ctl_end_1[1] = {0x0d};
 static uint8_t ctl_end_2[1] = {0x0e};
 
+```
+
+# 
+
+```c
+
+
+
 ```
\ No newline at end of file
index eeff17fa7ebeed7c18699e81396b0b9e88df5748..d7687fd59ae4f432225b3f1ddacf9ef7b060f5ed 100644 (file)
@@ -174,8 +174,8 @@ int run_select(int fd, struct sockaddr_in* servaddr){
                 event -= 1;
                 while(valread < MAXBUFFLEN){
                     n = read(client_fd, client_buff[i] + valread, MAXBUFFLEN - valread);
-                    if(n <= 0 && errno != EAGAIN){
-                        client_fds[i] = 0;
+                    if(n < 0){
+
                         break;
                     } 
                     valread += n;
@@ -298,13 +298,10 @@ int run_poll(int fd, struct sockaddr_in* servaddr){
                 event -= 1;
                 while(valread < MAXBUFFLEN){
                     n = read(client_fd, client_buff[i] + valread, MAXBUFFLEN - valread);
-                    if(n <= 0 && errno != EAGAIN){
-                        pollfds[i].fd = 0;
-                        break;
-                    } else {
+                    if(n < 0){
 
                         break;
-                    }
+                    } 
                     valread += n;
                 }
 
@@ -326,6 +323,7 @@ int run_epoll(int fd, struct sockaddr_in* servaddr){
 
     int connections = 0;
 
+    int event;
     struct epoll_event ev; 
     struct epoll_event* evs = NULL;
     int servlen;
@@ -358,70 +356,77 @@ int run_epoll(int fd, struct sockaddr_in* servaddr){
 
     while(1){
 
-
         event = epoll_wait(eplfd, evs, client_num + 1, -1);
 
+        printf("event: %d cn: %d\n", event, client_num);
+
         for(int i = 0 ; i < event; i++){
 
-            if(evs[i].events & EPOLLIN){
+            if (
+                (evs[i].events & EPOLLERR) ||
+                (evs[i].events & EPOLLHUP) ||
+                (!(evs[i].events & EPOLLIN)
+            ) 
+            ){
+                continue;
+            }
 
-                if(evs[i].data.fd == fd){
+            if(evs[i].data.fd == fd){
 
-                    int added = 0;
-    
-                    client_fd = accept(fd, (struct sockaddr*)servaddr, (socklen_t*)&servlen);
-    
-                    if(ctl_fd == 0){
-    
-                        ctl_fd = client_fd;
-    
-                        ctl_runner(ctl_fd);
-    
-                        break;
-    
-                    } else {
-    
-                        read(client_fd, hello, 37);
-                        connections += 1;
-    
-                        if(connections == client_num){
-                            write(ctl_fd, ctl_start_1, 1);
-                            write(ctl_fd, ctl_start_2, 1);
-                        }
-    
-                    }
-                    if(client_fd < 0){
-                        printf("failed to accept\n");
-                        break;
-                    }
-                    if(make_socket_non_blocking(client_fd) < 0){
-                        printf("accept non-blocking failed\n");
-                        break;
-                    }
-    
-                    for(int i = 1; i < client_num + 1; i++){
-                        if(pollfds[i].fd == 0){
-                            pollfds[i].fd = client_fd;
-                            added = 1;
-                            break;
-                        }
-                    }
-                    if(added != 1){
-                        printf("accept slot full\n");
-                        break;
-                    }
+                int added = 0;
 
+                client_fd = accept(fd, (struct sockaddr*)servaddr, (socklen_t*)&servlen);
 
+                if(ctl_fd == 0){
+
+                    ctl_fd = client_fd;
+
+                    ctl_runner(ctl_fd);
+
+                    continue;
 
                 } else {
 
+                    read(client_fd, hello, 37);
+                    connections += 1;
 
+                    if(connections == client_num){
 
+                        write(ctl_fd, ctl_start_1, 1);
+                        write(ctl_fd, ctl_start_2, 1);
+                    }
+
+                }
+                if(client_fd < 0){
+                    printf("failed to accept\n");
+                    continue;
+                }
+                if(make_socket_non_blocking(client_fd) < 0){
+                    printf("accept non-blocking failed\n");
+                    continue;
+                }
 
 
+                ev.data.fd = client_fd;
+                ev.events = EPOLLIN | EPOLLET;
 
+                if(epoll_ctl(eplfd, EPOLL_CTL_ADD, client_fd, &ev) < 0){
+                    printf("epoll add client failed\n");
+                    continue;
                 }
 
+            } else {
+
+                valread = 0;
+                n = 0;
+                while(valread < MAXBUFFLEN){
+                    n = read(evs[i].data.fd, client_buff[i] + valread, MAXBUFFLEN - valread);
+                    if(n < 0){
+                        break;
+                    } 
+
+                    valread += n;
+                }
 
             }
 
@@ -429,6 +434,8 @@ int run_epoll(int fd, struct sockaddr_in* servaddr){
 
     }
 
+epoll_out:
+
     free(evs);
 
     return 0;
diff --git a/iperf/setup.sh b/iperf/setup.sh
new file mode 100755 (executable)
index 0000000..3641e5f
--- /dev/null
@@ -0,0 +1,17 @@
+#!/bin/bash 
+
+
+echo "creating interface..."
+
+sudo ip netns add net1
+
+sudo ip link add dev veth11 type veth peer name veth12 netns net1
+
+sudo ip link set up veth11
+
+sudo ip netns exec net1 ip link set up veth12
+
+sudo ip addr add 192.168.62.5/24 dev veth11
+
+sudo ip netns exec net1 ip addr add 192.168.62.6/24 dev veth12
+
diff --git a/iperf/test.sh b/iperf/test.sh
deleted file mode 100755 (executable)
index 3641e5f..0000000
+++ /dev/null
@@ -1,17 +0,0 @@
-#!/bin/bash 
-
-
-echo "creating interface..."
-
-sudo ip netns add net1
-
-sudo ip link add dev veth11 type veth peer name veth12 netns net1
-
-sudo ip link set up veth11
-
-sudo ip netns exec net1 ip link set up veth12
-
-sudo ip addr add 192.168.62.5/24 dev veth11
-
-sudo ip netns exec net1 ip addr add 192.168.62.6/24 dev veth12
-