Browse Source

multithread

Danilo Fragoso 10 months ago
parent
commit
a3aa178b37
1 changed files with 27 additions and 22 deletions
  1. 27 22
      main.zig

+ 27 - 22
main.zig

@@ -24,30 +24,35 @@ pub fn main() !void {
             std.debug.print("error accept: {any}\n", .{err});
             continue;
         };
-        //defer posix.close(conn);
-
-        std.debug.print("Connection received\n", .{});
-        var requestBuffer: [1024 * 1024]u8 = undefined;
-        var responseBuffer: [1024 * 1024]u8 = undefined;
-        while (true) {
-            const n = try socket.readUntilNewLine(conn, &requestBuffer);
-            if (n == 0) {
-                break;
-            }
-
-            const cmdResponse = command.parse(requestBuffer[0..n]) orelse {
-                std.debug.print("Failed to parse message\n", .{});
-                socket.write(conn, "false\n") catch |err| {
-                    std.debug.print("error writing: {any}\n", .{err});
-                };
-                continue;
-            };
 
-            @memcpy(responseBuffer[0..cmdResponse.len], cmdResponse);
-            responseBuffer[cmdResponse.len] = '\n';
-            socket.write(conn, responseBuffer[0 .. cmdResponse.len + 1]) catch |err| {
+        const thread = try std.Thread.spawn(.{}, handleConnection, .{conn});
+        thread.detach();
+    }
+}
+
+pub fn handleConnection(conn: posix.socket_t) !void {
+    defer posix.close(conn);
+
+    var requestBuffer: [1024 * 1024]u8 = undefined;
+    var responseBuffer: [1024 * 1024]u8 = undefined;
+    while (true) {
+        const n = try socket.readUntilNewLine(conn, &requestBuffer);
+        if (n == 0) {
+            break;
+        }
+
+        const cmdResponse = command.parse(requestBuffer[0..n]) orelse {
+            std.debug.print("Failed to parse message\n", .{});
+            socket.write(conn, "false\n") catch |err| {
                 std.debug.print("error writing: {any}\n", .{err});
             };
-        }
+            continue;
+        };
+
+        @memcpy(responseBuffer[0..cmdResponse.len], cmdResponse);
+        responseBuffer[cmdResponse.len] = '\n';
+        socket.write(conn, responseBuffer[0 .. cmdResponse.len + 1]) catch |err| {
+            std.debug.print("error writing: {any}\n", .{err});
+        };
     }
 }