Skip to content

Instantly share code, notes, and snippets.

@masakielastic
Created March 4, 2026 05:06
Show Gist options
  • Select an option

  • Save masakielastic/fe8fddfafac998d221020040295a8aa1 to your computer and use it in GitHub Desktop.

Select an option

Save masakielastic/fe8fddfafac998d221020040295a8aa1 to your computer and use it in GitHub Desktop.
Zig 0.15 系で HTTP/1 サーバー

Zig 0.15 系で HTTP/1 サーバー

zig run server.zig
curl -v http//localhost:3000
// src/main.zig
const std = @import("std");
pub fn main() !void {
const addr = try std.net.Address.parseIp4("127.0.0.1", 3000);
var server = try addr.listen(.{});
defer server.deinit();
std.debug.print("listening on http://127.0.0.1:3000\n", .{});
while (true) {
const conn = try server.accept();
handleConn(conn) catch |err| {
// 例なので雑にログだけ出して次へ
std.debug.print("connection error: {s}\n", .{@errorName(err)});
};
}
}
fn handleConn(conn: std.net.Server.Connection) !void {
defer conn.stream.close();
// Zig 0.15 の新I/Oインターフェイス用に、reader/writer それぞれバッファを渡す
var reader_buf: [8 * 1024]u8 = undefined;
var writer_buf: [8 * 1024]u8 = undefined;
var reader = conn.stream.reader(&reader_buf).file_reader;
var writer = conn.stream.writer(&writer_buf).file_writer;
var http_server = std.http.Server.init(&reader.interface, &writer.interface);
// 1リクエストだけ処理する最小例
var req = try http_server.receiveHead();
// 確認用ログ(パスなど見たい場合)
std.debug.print("{s} {s}\n", .{ @tagName(req.head.method), req.head.target });
try req.respond("hello!\n", .{});
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment