]> git.seodisparate.com - c_simple_http/commitdiff
Minor refactoring
authorStephen Seo <seo.disparate@gmail.com>
Wed, 6 Nov 2024 05:47:47 +0000 (14:47 +0900)
committerStephen Seo <seo.disparate@gmail.com>
Wed, 6 Nov 2024 05:47:47 +0000 (14:47 +0900)
Accept connections until there are no more connections to accept in a
single iteration.

src/main.c

index c32547f6f756e79384977918689719ccd7135c4b..325663f864316cd1cfacbb3cf1a4181837a4f40a 100644 (file)
@@ -560,39 +560,45 @@ int main(int argc, char **argv) {
     }
 
     socket_len = sizeof(struct sockaddr_in6);
-    ret = accept(tcp_socket, (struct sockaddr *)&peer_info, &socket_len);
-    if (ret == -1 && (errno == EAGAIN || errno == EWOULDBLOCK)) {
-      // No connecting peers, do nothing.
-    } else if (ret == -1) {
-      printf("WARNING: accept: errno %d\n", errno);
-    } else if (ret >= 0) {
-      // Received connection, handle it.
-      if ((args.flags & 1) == 0) {
-        printf("Peer connected: addr is ");
-        c_simple_http_print_ipv6_addr(stdout, &peer_info.sin6_addr);
-        printf(", fd is %d\n", ret);
+    while (1) {
+      ret = accept(tcp_socket, (struct sockaddr *)&peer_info, &socket_len);
+      if (ret == -1 && (errno == EAGAIN || errno == EWOULDBLOCK)) {
+        // No connecting peers, do nothing.
+        break;
+      } else if (ret == -1) {
+        printf("WARNING: accept: errno %d\n", errno);
+        break;
+      } else if (ret >= 0) {
+        // Received connection, handle it.
+        if ((args.flags & 1) == 0) {
+          printf("Peer connected: addr is ");
+          c_simple_http_print_ipv6_addr(stdout, &peer_info.sin6_addr);
+          printf(", fd is %d\n", ret);
+        } else {
+          printf("Peer connected.\n");
+        }
+        int connection_fd = ret;
+
+        // Set non-blocking.
+        ret = fcntl(connection_fd, F_SETFL, O_NONBLOCK);
+        if (ret < 0) {
+          fprintf(
+            stderr, "ERROR Failed to set non-blocking on connection fd!\n");
+          close(connection_fd);
+          continue;
+        }
+
+        ConnectionItem *citem = malloc(sizeof(ConnectionItem));
+        citem->fd = connection_fd;
+        ret = clock_gettime(CLOCK_MONOTONIC, &citem->time_point);
+        citem->peer_addr = peer_info.sin6_addr;
+        simple_archiver_list_add(connections,
+                                 citem,
+                                 c_simple_http_cleanup_connection_item);
       } else {
-        printf("Peer connected.\n");
-      }
-      int connection_fd = ret;
-
-      // Set non-blocking.
-      ret = fcntl(connection_fd, F_SETFL, O_NONBLOCK);
-      if (ret < 0) {
-        fprintf(stderr, "ERROR Failed to set non-blocking on connection fd!\n");
-        close(connection_fd);
-        continue;
+        printf("WARNING: accept: Unknown invalid state!\n");
+        break;
       }
-
-      ConnectionItem *citem = malloc(sizeof(ConnectionItem));
-      citem->fd = connection_fd;
-      ret = clock_gettime(CLOCK_MONOTONIC, &citem->time_point);
-      citem->peer_addr = peer_info.sin6_addr;
-      simple_archiver_list_add(connections,
-                               citem,
-                               c_simple_http_cleanup_connection_item);
-    } else {
-      printf("WARNING: accept: Unknown invalid state!\n");
     }
 
     clock_gettime(CLOCK_MONOTONIC, &connection_context.current_time);