From 1712c5af3b131dee6d3987e5cdd50d92c6231b62 Mon Sep 17 00:00:00 2001 From: ha7ilm Date: Fri, 13 Jan 2017 13:00:48 +0100 Subject: [PATCH] nmux: MSG_NOSIGNAL fixed client close --- nmux.cpp | 20 +++++++++++--------- nmux.h | 1 - 2 files changed, 11 insertions(+), 10 deletions(-) diff --git a/nmux.cpp b/nmux.cpp index 03f3b2f..49733b9 100644 --- a/nmux.cpp +++ b/nmux.cpp @@ -189,7 +189,6 @@ int main(int argc, char* argv[]) //Is there a new client connection? if( FD_ISSET(listen_socket, &select_fds) && ((new_socket = accept(listen_socket, (struct sockaddr*)&addr_cli, &addr_cli_len)) != -1) ) { - select_ret--; if(NMUX_DEBUG) fprintf(stderr, "mainfor: accepted (socket = %d).\n", new_socket); //Close all finished clients for(int i=0;istatus == CS_THREAD_FINISHED) { if(NMUX_DEBUG) fprintf(stderr, "mainfor: client removed: %d\n", i); - client_erase(clients[i]); + //client destructor + pool->remove_thread(clients[i]->tsmthread); clients.erase(clients.begin()+i); + i--; } } + if(NMUX_DEBUG) + { + fprintf(stderr, "\x1b[33mmainfor: clients now: "); + for(int i=0;iremove_thread(client->tsmthread); -} - void* client_thread (void* param) { fprintf(stderr, "client 0x%x: started!\n", (unsigned)param); @@ -318,7 +320,7 @@ void* client_thread (void* param) //Read data from global tsmpool and write it to client socket if(NMUX_DEBUG) fprintf(stderr, "client 0x%x: sending...", (unsigned)param); - ret = send(this_client->socket, pool_read_buffer + client_buffer_index, lpool->size - client_buffer_index, 0); + ret = send(this_client->socket, pool_read_buffer + client_buffer_index, lpool->size - client_buffer_index, MSG_NOSIGNAL); if(NMUX_DEBUG) fprintf(stderr, "client sent.\n"); if(ret == -1) { @@ -332,8 +334,8 @@ void* client_thread (void* param) } client_thread_exit: - this_client->status = CS_THREAD_FINISHED; fprintf(stderr, "client 0x%x: CS_THREAD_FINISHED, client_goto_source = %d, errno = %d", (unsigned)param, client_goto_source, errno); + this_client->status = CS_THREAD_FINISHED; pthread_exit(NULL); return NULL; } diff --git a/nmux.h b/nmux.h index f59efe0..faf95ef 100644 --- a/nmux.h +++ b/nmux.h @@ -39,7 +39,6 @@ typedef struct client_s void print_exit(const char* why); void sig_handler(int signo); -void client_erase(client_t* client); void* client_thread (void* param); void error_exit(const char* why); void maxfd(int* maxfd, int fd);