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: std.c.sockaddr = undefined;
+ var addr_size: std.c.socklen_t = @sizeOf(std.c.sockaddr);
+ _ = std.c.getpeername(client_socket, &addr, &addr_size);
+ std.debug.print("new connection from {}\n", .{addr});
} else {
var closed = false;
var req = Request{ .fd = ready_socket };
- const read = posix.read(ready_socket, buf) catch 0;
+ var read: usize = 0;
+ while (true) {
+ const newly_read = posix.read(ready_socket, buf[read..]) catch 0;
+ read += newly_read;
+ if (newly_read == 0)
+ break;
+ }
if (read == 0) {
closed = true;
} else {
body: ?[]u8 = null,
pub fn parse(self: *Request, buf: []u8) bool {
+ std.debug.print("buf: {s}\n", .{buf});
var state: u8 = 0;
var start: u32 = 0;