From bd405bc6f3104ba7c6d41c42561975d73fd81134 Mon Sep 17 00:00:00 2001 From: amelia squires Date: Wed, 11 Sep 2024 00:02:08 -0500 Subject: add res:stop --- src/net.c | 18 ++++++++++++++++++ 1 file changed, 18 insertions(+) (limited to 'src/net.c') diff --git a/src/net.c b/src/net.c index b71b290..260657a 100644 --- a/src/net.c +++ b/src/net.c @@ -161,6 +161,8 @@ void* handle_client(void *_arg){ luaI_tsetcf(L, res_idx, "sendfile", l_sendfile); luaI_tsetcf(L, res_idx, "write", l_write); luaI_tsetcf(L, res_idx, "close", l_close); + luaI_tsetcf(L, res_idx, "stop", l_stop); + //values luaI_tseti(L, res_idx, "client_fd", client_fd); @@ -210,10 +212,18 @@ void* handle_client(void *_arg){ //call the function lua_call(L, 2, 0); + + //check if res:stop() was called + lua_pushstring(L, "_stop"); + lua_gettable(L, res_idx); + if(!lua_isnil(L, -1)) + goto net_end; } } } + +net_end: larray_clear(params); parray_lclear(owo); //dont free the rest @@ -289,6 +299,7 @@ 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); @@ -297,6 +308,13 @@ 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){ + //deny request + free(client_fd); + continue; + } + count++; + //open a state to call shit, should be somewhat thread safe thread_arg_struct* args = malloc(sizeof * args); -- cgit v1.2.3