mirror of
https://codeberg.org/ziglang/zig.git
synced 2025-12-07 14:24:43 +00:00
zig std: use threads for the http server
This commit is contained in:
parent
c7c7ad1b78
commit
574b33e65a
1 changed files with 25 additions and 17 deletions
|
|
@ -36,26 +36,34 @@ pub fn main() !void {
|
||||||
.zig_lib_directory = zig_lib_directory,
|
.zig_lib_directory = zig_lib_directory,
|
||||||
};
|
};
|
||||||
|
|
||||||
var read_buffer: [8000]u8 = undefined;
|
while (true) {
|
||||||
accept: while (true) {
|
|
||||||
const connection = try http_server.accept();
|
const connection = try http_server.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();
|
defer connection.stream.close();
|
||||||
|
|
||||||
|
var read_buffer: [8000]u8 = undefined;
|
||||||
var server = std.http.Server.init(connection, &read_buffer);
|
var server = std.http.Server.init(connection, &read_buffer);
|
||||||
while (server.state == .ready) {
|
while (server.state == .ready) {
|
||||||
var request = server.receiveHead() catch |err| switch (err) {
|
var request = server.receiveHead() catch |err| switch (err) {
|
||||||
error.HttpConnectionClosing => continue :accept,
|
error.HttpConnectionClosing => return,
|
||||||
else => {
|
else => {
|
||||||
std.log.err("closing http connection: {s}", .{@errorName(err)});
|
std.log.err("closing http connection: {s}", .{@errorName(err)});
|
||||||
continue :accept;
|
return;
|
||||||
},
|
},
|
||||||
};
|
};
|
||||||
serveRequest(&request, &context) catch |err| {
|
serveRequest(&request, context) catch |err| {
|
||||||
std.log.err("unable to serve {s}: {s}", .{ request.head.target, @errorName(err) });
|
std.log.err("unable to serve {s}: {s}", .{ request.head.target, @errorName(err) });
|
||||||
continue :accept;
|
return;
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
const Context = struct {
|
const Context = struct {
|
||||||
|
|
|
||||||
Loading…
Add table
Reference in a new issue