diff options
| author | Andrew Kelley <andrew@ziglang.org> | 2024-03-06 18:00:34 -0700 |
|---|---|---|
| committer | Andrew Kelley <andrew@ziglang.org> | 2024-03-10 17:51:06 -0700 |
| commit | 574b33e65a6968928d359bc553c4e0c38312a3e9 (patch) | |
| tree | 62ccc4547c603516aac30371ac3f26dd5898caff /lib/compiler/std-docs.zig | |
| parent | c7c7ad1b78fc8f79b5a0ddebdd374630f272be9a (diff) | |
| download | zig-574b33e65a6968928d359bc553c4e0c38312a3e9.tar.gz zig-574b33e65a6968928d359bc553c4e0c38312a3e9.zip | |
zig std: use threads for the http server
Diffstat (limited to 'lib/compiler/std-docs.zig')
| -rw-r--r-- | lib/compiler/std-docs.zig | 44 |
1 files changed, 26 insertions, 18 deletions
diff --git a/lib/compiler/std-docs.zig b/lib/compiler/std-docs.zig index e398d4c2ad..f1d0f87add 100644 --- a/lib/compiler/std-docs.zig +++ b/lib/compiler/std-docs.zig @@ -36,25 +36,33 @@ pub fn main() !void { .zig_lib_directory = zig_lib_directory, }; - var read_buffer: [8000]u8 = undefined; - accept: while (true) { + while (true) { const connection = try http_server.accept(); - defer connection.stream.close(); - - var server = std.http.Server.init(connection, &read_buffer); - while (server.state == .ready) { - var request = server.receiveHead() catch |err| switch (err) { - error.HttpConnectionClosing => continue :accept, - else => { - std.log.err("closing http connection: {s}", .{@errorName(err)}); - continue :accept; - }, - }; - serveRequest(&request, &context) catch |err| { - std.log.err("unable to serve {s}: {s}", .{ request.head.target, @errorName(err) }); - continue :accept; - }; - } + _ = std.Thread.spawn(.{}, accept, .{ &context, connection }) catch |err| { + std.log.err("unable to accept connection: {s}", .{@errorName(err)}); + connection.stream.close(); + continue; + }; + } +} + +fn accept(context: *Context, connection: std.net.Server.Connection) void { + defer connection.stream.close(); + + var read_buffer: [8000]u8 = undefined; + var server = std.http.Server.init(connection, &read_buffer); + while (server.state == .ready) { + var request = server.receiveHead() catch |err| switch (err) { + error.HttpConnectionClosing => return, + else => { + std.log.err("closing http connection: {s}", .{@errorName(err)}); + return; + }, + }; + serveRequest(&request, context) catch |err| { + std.log.err("unable to serve {s}: {s}", .{ request.head.target, @errorName(err) }); + return; + }; } } |
