@@ -16,7 +16,11 @@ import sync
1616
1717const tiny_bad_request_response = 'HTTP/1.1 400 Bad Request\r\n Content-Length: 0\r\n Connection: close\r\n\r\n ' .bytes ()
1818
19- #include <arpa/inet.h>
19+ $if windows {
20+ #include <winsock2.h>
21+ } $else {
22+ #include <arpa/inet.h>
23+ }
2024#include <fcntl.h>
2125#include <sys/epoll.h>
2226#include <errno.h>
@@ -80,11 +84,12 @@ fn C.epoll_wait(__epfd int, __events &C.epoll_event, __maxevents int, __timeout
8084
8185struct Server {
8286mut :
83- server_socket int
84- epoll_fd int
85- lock_flag sync.Mutex
86- has_clients int
87- threads [max_thread_pool_size]thread
87+ server_socket int
88+ epoll_fd int
89+ lock_flag sync.Mutex
90+ has_clients int
91+ threads [max_thread_pool_size]thread
92+ request_handler fn (HttpRequest) ! []u8 @[required]
8893}
8994
9095fn C.fcntl (fd int , cmd int , arg int ) int
@@ -235,7 +240,6 @@ fn handle_client_closure(server &Server, client_fd int) {
235240 }
236241}
237242
238- @[manualfree]
239243fn process_events (server & Server) {
240244 events := [max_connection_size]C.epoll_event{}
241245 num_events := C.epoll_wait (server.epoll_fd, & events[0 ], max_connection_size, - 1 )
@@ -266,7 +270,7 @@ fn process_events(server &Server) {
266270 // This lock is a workaround for avoiding race condition in router.params
267271 // This slows down the server, but it's a temporary solution
268272 (* server).lock_flag.lock ()
269- response_buffer := handle_request (decoded_http_request) or {
273+ response_buffer := ( * server). request_handler (decoded_http_request) or {
270274 eprintln ('Error handling request ${err} ' )
271275 C.send (unsafe { events[i].data.fd }, tiny_bad_request_response.data,
272276 tiny_bad_request_response.len, 0 )
0 commit comments