diff --git a/Makefile b/Makefile index b38f0c2..e6b5f3e 100644 --- a/Makefile +++ b/Makefile @@ -16,7 +16,7 @@ all: main main: @${CC} -o bin/httpsrv src/main.c ${CC_FLAGS} -debug: CC_FLAGS:=-g -O0 -v -fsanitize=undefined -fsanitize=address ${CC_FLAGS} +debug: CC_FLAGS:=-g -O0 -v ${CC_FLAGS} debug: all clean: diff --git a/bin/httpsrv b/bin/httpsrv index 859eb5e..686c11f 100755 Binary files a/bin/httpsrv and b/bin/httpsrv differ diff --git a/lib/reqHeader.h b/lib/reqHeader.h index b3a6573..2f10253 100644 --- a/lib/reqHeader.h +++ b/lib/reqHeader.h @@ -3,6 +3,7 @@ #include #include #include +#include #ifdef NO_GC #include #define malloc(n) GC_malloc(n) @@ -18,7 +19,8 @@ typedef struct { ReqHeader readReqHeader(int client) { char* buf = malloc(1024); - read(client, buf, 1024); + //read(client, buf, 1024); + recv(client, buf, 1024, 0); ReqHeader header; if (buf == NULL || !strcmp(buf, "")) { errno = -1; diff --git a/src/srv.c b/src/srv.c index fe9ea87..f822f54 100644 --- a/src/srv.c +++ b/src/srv.c @@ -39,9 +39,7 @@ void segfault(int sig) { #endif } -void *handle(void* arg) { - int client = *(int*)arg; - +int handle(int client) { ReqHeader request = readReqHeader(client); ResHeader rawHeader; if (errno == -1) { @@ -95,6 +93,11 @@ int srv(char* ADDR, int PORT) { srvAddr.sin_port = htons(PORT); srvAddr.sin_addr.s_addr = inet_addr(ADDR); + int opt = 1; + setsockopt(srvSocket, SOL_SOCKET, SO_REUSEADDR, (void *)opt, sizeof(int)); + opt = 0; + setsockopt(srvSocket, SOL_SOCKET, SO_LINGER, (void *)opt, sizeof(int)); + if (bind( srvSocket, (struct sockaddr*) &srvAddr, @@ -116,6 +119,6 @@ int srv(char* ADDR, int PORT) { while(1) { int client = accept(srvSocket, NULL, NULL); - handle(&client); + handle(client); } }