authorgravatar for andrew@ziglang.orgAndrew Kelley <andrew@ziglang.org> 2024-03-06 18:00:34-07:00
committergravatar for andrew@ziglang.orgAndrew Kelley <andrew@ziglang.org> 2024-03-10 17:51:06-07:00
log574b33e65a6968928d359bc553c4e0c38312a3e9
tree62ccc4547c603516aac30371ac3f26dd5898caff
parentc7c7ad1b78fc8f79b5a0ddebdd374630f272be9a

zig std: use threads for the http server


1 files changed, 26 insertions(+), 18 deletions(-)

lib/compiler/std-docs.zig+26-18
......@@ -36,25 +36,33 @@ pub fn main() !void {
3636 .zig_lib_directory = zig_lib_directory,
3737 };
3838
39 var read_buffer: [8000]u8 = undefined;
40 accept: while (true) {
39 while (true) {
4140 const connection = try http_server.accept();
42 defer connection.stream.close();
43
44 var server = std.http.Server.init(connection, &read_buffer);
45 while (server.state == .ready) {
46 var request = server.receiveHead() catch |err| switch (err) {
47 error.HttpConnectionClosing => continue :accept,
48 else => {
49 std.log.err("closing http connection: {s}", .{@errorName(err)});
50 continue :accept;
51 },
52 };
53 serveRequest(&request, &context) catch |err| {
54 std.log.err("unable to serve {s}: {s}", .{ request.head.target, @errorName(err) });
55 continue :accept;
56 };
57 }
41 _ = std.Thread.spawn(.{}, accept, .{ &context, connection }) catch |err| {
42 std.log.err("unable to accept connection: {s}", .{@errorName(err)});
43 connection.stream.close();
44 continue;
45 };
46 }
47}
48
49fn accept(context: *Context, connection: std.net.Server.Connection) void {
50 defer connection.stream.close();
51
52 var read_buffer: [8000]u8 = undefined;
53 var server = std.http.Server.init(connection, &read_buffer);
54 while (server.state == .ready) {
55 var request = server.receiveHead() catch |err| switch (err) {
56 error.HttpConnectionClosing => return,
57 else => {
58 std.log.err("closing http connection: {s}", .{@errorName(err)});
59 return;
60 },
61 };
62 serveRequest(&request, context) catch |err| {
63 std.log.err("unable to serve {s}: {s}", .{ request.head.target, @errorName(err) });
64 return;
65 };
5866 }
5967}
6068