diff --git a/http/http_server.c b/http/http_server.c index 3f26bc3..db3d192 100644 --- a/http/http_server.c +++ b/http/http_server.c @@ -9,6 +9,7 @@ #include #include #include +#include #include HttpServerRunStatus http_server_setup(HttpServer *s) { @@ -48,6 +49,16 @@ HttpServerRunStatus http_server_run(HttpServer *s) { accept(s->server_fd, (struct sockaddr *)s->address, &addrlen)) < 0) return HTTP_SRS_ACCEPT_FAILED; + pid_t pid = fork(); + if (pid < 0) { + close(client_fd); + return HTTP_SRS_FORK_FAILED; + } + if (pid > 0) { + close(client_fd); + return HTTP_SRS_WONT_HANDLE; + } + char request[BUFSIZ] = {0}; if ((valread = read(client_fd, request, 1024 - 1)) < 0) diff --git a/http/http_server.h b/http/http_server.h index 3814b06..1db3274 100644 --- a/http/http_server.h +++ b/http/http_server.h @@ -19,6 +19,8 @@ typedef enum { HTTP_SRS_ACCEPT_FAILED, HTTP_SRS_READ_FAILED, HTTP_SRS_HANDLE_REQUEST_FAILED, + HTTP_SRS_FORK_FAILED, + HTTP_SRS_WONT_HANDLE, } HttpServerRunStatus; typedef struct {