From 84a7d45e91c995eb877d7b6688c08af3b21e1c1d Mon Sep 17 00:00:00 2001 From: seajee Date: Tue, 20 May 2025 20:52:12 +0200 Subject: [PATCH] Update chat_server example --- examples/chat_server.c | 48 ++++++++++++------------------------------ 1 file changed, 14 insertions(+), 34 deletions(-) diff --git a/examples/chat_server.c b/examples/chat_server.c index 8ae273a..502d474 100644 --- a/examples/chat_server.c +++ b/examples/chat_server.c @@ -57,11 +57,21 @@ void broadcast(const Sock *from, const char *msg, size_t msg_len) pthread_mutex_unlock(&pool_lock); } -void *handle_client(void *user_data) +void handle_client(Sock *client, void *user_data) { - Sock *client = (Sock*) user_data; - ssize_t received = 0; + (void) user_data; + if (!add_client(client)) { + fprintf(stderr, "ERROR: TCP_Socket pool buffer is full (%d)\n", + POOL_CAPACITY); + sock_close(client); + return; + } + + printf("INFO: New client connected from %s:%d\n", client->addr.str, + client->addr.port); + + ssize_t received = 0; char buffer[BUFFER_CAPACITY]; memset(buffer, 0, sizeof(buffer)); @@ -108,8 +118,6 @@ disconnect: received = snprintf(buffer, sizeof(buffer), "[Server] `%.*s` left the chat", (int)username_length, username); broadcast(client, buffer, received); - - return NULL; } int main(void) @@ -139,38 +147,10 @@ int main(void) printf("INFO: Listen socket\n"); while (true) { - Sock *client = sock_accept(server); - if (client == NULL) { + if (!sock_async_accept(server, handle_client, NULL)) { fprintf(stderr, "ERROR: Could not accept client\n"); - sock_close(client); continue; } - - if (!add_client(client)) { - fprintf(stderr, "ERROR: TCP_Socket pool buffer is full (%d)\n", - POOL_CAPACITY); - sock_close(client); - continue; - } - - // printf("INFO: Pool:\n"); - // pthread_mutex_lock(&pool_lock); - // for (size_t i = 0; i < POOL_CAPACITY; ++i) { - // printf(" %ld: %p\n", i, socket_pool[i]); - // } - // pthread_mutex_unlock(&pool_lock); - // printf("INFO: End pool:\n"); - - pthread_t thread; - if (pthread_create(&thread, NULL, &handle_client, client) != 0) { - fprintf(stderr, "ERROR: Could not create thread\n"); - sock_close(client); - continue; - } - pthread_detach(thread); - - printf("INFO: New client connected from %s:%d\n", client->addr.str, - client->addr.port); } sock_close(server);