errdefer posix.close(client_socket);
var event = linux.epoll_event{ .events = linux.EPOLL.IN, .data = .{ .fd = client_socket } };
try posix.epoll_ctl(self.efd, linux.EPOLL.CTL_ADD, client_socket, &event);
errdefer posix.close(client_socket);
var event = linux.epoll_event{ .events = linux.EPOLL.IN, .data = .{ .fd = client_socket } };
try posix.epoll_ctl(self.efd, linux.EPOLL.CTL_ADD, client_socket, &event);
var addr_size: std.c.socklen_t = @sizeOf(std.c.sockaddr);
_ = std.c.getpeername(client_socket, &addr, &addr_size);
var addr_size: std.c.socklen_t = @sizeOf(std.c.sockaddr);
_ = std.c.getpeername(client_socket, &addr, &addr_size);
pub fn add_header(self: *Response, name: []const u8, value: anytype) !void {
const header = try self.extra_headers.addOne();
try header.name.writer().writeAll(name);
pub fn add_header(self: *Response, name: []const u8, value: anytype) !void {
const header = try self.extra_headers.addOne();
try header.name.writer().writeAll(name);
try header.value.writer().writeAll(value[0]);
} else {
try std.fmt.format(header.value.writer(), value[0], value[1]);
try header.value.writer().writeAll(value[0]);
} else {
try std.fmt.format(header.value.writer(), value[0], value[1]);
pub fn write(self: *Response, comptime fmt: []const u8, args: anytype) !void {
const writer = self.stream_body.writer();
pub fn write(self: *Response, comptime fmt: []const u8, args: anytype) !void {
const writer = self.stream_body.writer();
try writer.writeAll(fmt);
} else {
try std.fmt.format(writer, fmt, args);
try writer.writeAll(fmt);
} else {
try std.fmt.format(writer, fmt, args);
- var compress_buffer = try std.BoundedArray(u8, 1024 * 32).init(0);
+ const CompressBuffer = struct {
+ var compress_buffer: std.BoundedArray(u8, 1024 * 32) = undefined;
+ };
+ try CompressBuffer.compress_buffer.resize(0);
// write head
const writer = self.stream_head.writer();
if (compress) {
var cfbs = std.io.fixedBufferStream(self.stream_body.getWritten());
// write head
const writer = self.stream_head.writer();
if (compress) {
var cfbs = std.io.fixedBufferStream(self.stream_body.getWritten());
try compressor.compress(cfbs.reader());
// try compressor.flush();
try compressor.finish();
try std.fmt.format(writer, "HTTP/1.1 {} {?s}\r\n" ++
"Content-Length: {}\r\n" ++
try compressor.compress(cfbs.reader());
// try compressor.flush();
try compressor.finish();
try std.fmt.format(writer, "HTTP/1.1 {} {?s}\r\n" ++
"Content-Length: {}\r\n" ++
- "Content-Encoding: gzip\r\n", .{ @intFromEnum(self.status), self.status.phrase(), compress_buffer.constSlice().len });
+ "Content-Encoding: gzip\r\n", .{ @intFromEnum(self.status), self.status.phrase(), CompressBuffer.compress_buffer.constSlice().len });
} else {
try std.fmt.format(writer, "HTTP/1.1 {} {?s}\r\n" ++
"Content-Length: {}\r\n", .{ @intFromEnum(self.status), self.status.phrase(), self.stream_body.pos });
} else {
try std.fmt.format(writer, "HTTP/1.1 {} {?s}\r\n" ++
"Content-Length: {}\r\n", .{ @intFromEnum(self.status), self.status.phrase(), self.stream_body.pos });