diff options
| author | ame <[email protected]> | 2024-11-07 01:47:00 -0600 |
|---|---|---|
| committer | ame <[email protected]> | 2024-11-07 01:47:00 -0600 |
| commit | bbaf2ecb5ca47d9eaf098a183cd197e536d20a02 (patch) | |
| tree | 967134a4369fff5f6297b2a6108bc950fcf4ebbe | |
| parent | 7c920f7f22a26e377aa9eab0f56ca45caddf7217 (diff) | |
fix two errors/'crashes'
| -rw-r--r-- | src/net.c | 6 | ||||
| -rw-r--r-- | src/net.h | 2 | ||||
| -rw-r--r-- | src/net/lua.c | 8 | ||||
| -rw-r--r-- | src/net/util.c | 2 | ||||
| -rw-r--r-- | tests/nets.lua | 8 |
5 files changed, 15 insertions, 11 deletions
@@ -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);
@@ -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) |
