From dd6c0b6b3333f287dcd0886f8a0551f283948505 Mon Sep 17 00:00:00 2001 From: ame Date: Thu, 7 Nov 2024 01:47:00 -0600 Subject: fix two errors/'crashes' --- src/net.c | 6 ++---- src/net.h | 2 -- src/net/lua.c | 8 ++++---- src/net/util.c | 2 +- tests/nets.lua | 8 ++++++++ 5 files changed, 15 insertions(+), 11 deletions(-) create mode 100644 tests/nets.lua diff --git a/src/net.c b/src/net.c index 7f94047..7cc3b12 100644 --- a/src/net.c +++ b/src/net.c @@ -5,7 +5,7 @@ #define max_uri_size 2048 -volatile size_t threads = 0; +_Atomic size_t threads = 0; void* handle_client(void *_arg){ //printf("--\n"); //pthread_mutex_lock(&mutex); @@ -313,7 +313,6 @@ int start_serv(lua_State* L, int port){ if (pthread_mutex_init(&con_mutex, NULL) != 0) p_fatal("con_mutex init failed\n"); - int count = 0; for(;;){ struct sockaddr_in client_addr; socklen_t client_addr_len = sizeof(client_addr); @@ -322,7 +321,7 @@ int start_serv(lua_State* L, int port){ if((*client_fd = accept(server_fd, (struct sockaddr*)&client_addr, &client_addr_len)) < 0) p_fatal("failed to accept\n"); - if(count >= max_con){ + if(threads >= max_con){ //deny request net_error(*client_fd, 503); close(*client_fd); @@ -330,7 +329,6 @@ int start_serv(lua_State* L, int port){ continue; } - count++; //open a state to call shit, should be somewhat thread safe thread_arg_struct* args = malloc(sizeof * args); diff --git a/src/net.h b/src/net.h index d9c8b4c..d2b7435 100644 --- a/src/net.h +++ b/src/net.h @@ -35,8 +35,6 @@ int start_serv(lua_State* L, int port); // static char* http_codes[600] = {0}; -extern volatile size_t threads; - static const luaL_Reg net_function_list [] = { {"listen",l_listen}, diff --git a/src/net/lua.c b/src/net/lua.c index ea03644..6004343 100644 --- a/src/net/lua.c +++ b/src/net/lua.c @@ -42,7 +42,7 @@ int l_write(lua_State* L){ resp = str_init(content); } - send(client_fd, resp->c, resp->len, 0); + send(client_fd, resp->c, resp->len, MSG_NOSIGNAL); str_free(resp); return 0; @@ -75,7 +75,7 @@ int l_send(lua_State* L){ } else i_write_header(L, header, &resp, content, len); - int a = send(client_fd, resp->c, resp->len, 0); + int a = send(client_fd, resp->c, resp->len, MSG_NOSIGNAL); // lua_pushstring(L, "client_fd"); @@ -257,12 +257,12 @@ int l_sendfile(lua_State* L){ str* r; i_write_header(L, header, &r, "", 0); - send(client_fd, r->c, r->len, 0); + send(client_fd, r->c, r->len, MSG_NOSIGNAL); str_free(r); for(size_t i = 0; i < sz; i += bsize){ fread(buffer, sizeof * buffer, bsize, fp); - if(send(client_fd, buffer, bsize > sz - i ? sz - i : bsize, 0) == -1) + if(send(client_fd, buffer, bsize > sz - i ? sz - i : bsize, MSG_NOSIGNAL) == -1) break; } diff --git a/src/net/util.c b/src/net/util.c index 150b8f9..c9f359e 100644 --- a/src/net/util.c +++ b/src/net/util.c @@ -428,6 +428,6 @@ void parse_mimetypes(){ int net_error(int fd, int code){ char out[512] = {0}; sprintf(out, "HTTP/1.1 %i %s\n\n", code, http_code(code)); - send(fd, out, strlen(out), 0); + send(fd, out, strlen(out), MSG_NOSIGNAL); return 0; } diff --git a/tests/nets.lua b/tests/nets.lua new file mode 100644 index 0000000..a356539 --- /dev/null +++ b/tests/nets.lua @@ -0,0 +1,8 @@ +llby = require"lullaby" + +llby.net.listen(function(server) + server:GET("/", function(res, req) + res:sendfile("license.md") + --res:sendfile("../awa/static/volcarona.gif") + end) +end, 8888) -- cgit v1.2.3