I'm creating a webserver using kqueue and core:net. I noticed a strange pattern that if I remove the printf/log from the event_loop (before the recv call), the program doesn't respond to the request. Is it possible that it's being tree-shaked? Any ideas how can I debug this?
The code is bigger than the example below, but the structure is similar to this. Any guidance is welcome!
handle_connection :: proc(server: ^Server, conn: net.TCP_Socket) {
bytes_read: int
err: Error
buf := [PACKET_SIZE]u8{}
bytes_read, err = net.recv_tcp(conn, buf[:])
// rest of request handling
}
main :: proc() {
running := false
for running {
err := eio.sync(&server.io) // read kqueue events
if err != nil {
log.debugf("Failed to listen to event: %v\n", err)
continue
}
for i in 0 ..< server.io.n_events {
event := server.io.events[i]
// log.debugf("Event: %v\n", event) // If I uncomment this line, the program responds to requests
switch event.filter {
case .SIGNAL:
if event.ident == uintptr(eio.Signal.SIGINT) {
running = false
}
case .READ:
if event.ident == uintptr(server.socket) {
conn, source, err := net.accept_tcp(server.socket)
if err != nil {
log.debugf("Error accepting connection: %v\n", err)
continue
}
handle_connection(server, conn)
}
}
}
}
}