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 {...@@ -36,25 +36,33 @@ pub fn main() !void {
36 .zig_lib_directory = zig_lib_directory,36 .zig_lib_directory = zig_lib_directory,
37 };37 };
3838
39 var read_buffer: [8000]u8 = undefined;39 while (true) {
40 accept: while (true) {
41 const connection = try http_server.accept();40 const connection = try http_server.accept();
42 defer connection.stream.close();41 _ = std.Thread.spawn(.{}, accept, .{ &context, connection }) catch |err| {
4342 std.log.err("unable to accept connection: {s}", .{@errorName(err)});
44 var server = std.http.Server.init(connection, &read_buffer);43 connection.stream.close();
45 while (server.state == .ready) {44 continue;
46 var request = server.receiveHead() catch |err| switch (err) {45 };
47 error.HttpConnectionClosing => continue :accept,46 }
48 else => {47}
49 std.log.err("closing http connection: {s}", .{@errorName(err)});48
50 continue :accept;49fn accept(context: *Context, connection: std.net.Server.Connection) void {
51 },50 defer connection.stream.close();
52 };51
53 serveRequest(&request, &context) catch |err| {52 var read_buffer: [8000]u8 = undefined;
54 std.log.err("unable to serve {s}: {s}", .{ request.head.target, @errorName(err) });53 var server = std.http.Server.init(connection, &read_buffer);
55 continue :accept;54 while (server.state == .ready) {
56 };55 var request = server.receiveHead() catch |err| switch (err) {
57 }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 };
58 }66 }
59}67}
6068