here is some working code incase anyone else runs into this:
const std = @import("std");
var serverptr: *std.http.Server = undefined;
pub fn main() !void {
try std.os.sigaction(std.os.SIG.INT, &.{
.handler = .{
.handler = struct {
fn func(sig: c_int) callconv(.C) void {
std.debug.print("sig={}\n", .{sig});
std.os.shutdown(serverptr.socket.sockfd.?, .both) catch unreachable;
}
}.func,
},
.mask = std.os.empty_sigset,
.flags = 0,
}, null);
var gpa = std.heap.GeneralPurposeAllocator(.{}){};
defer _ = gpa.deinit();
const alloc = gpa.allocator();
const address = try std.net.Ip4Address.parse("127.0.0.1", 4000);
var server = std.http.Server.init(
alloc,
.{ .reuse_port = true, .reuse_address = true },
);
defer server.deinit();
serverptr = &server;
try server.listen(.{ .in = address });
std.debug.print("\nlistening on http://{}\n", .{address});
while (true) {
var res = server.accept(.{
.allocator = alloc,
.header_strategy = .{ .dynamic = std.mem.page_size },
}) catch |e| switch (e) {
error.SocketNotListening => break,
else => return e,
};
defer res.deinit();
defer _ = res.reset();
try res.wait();
res.transfer_encoding = .chunked;
try res.headers.append("content-type", "application/json");
try res.do();
_ = try res.writer().write("foobar");
try res.finish();
}
std.debug.print("\ndone\n", .{});
}