From e3760b1ec7c1a1efb658cee63a177ef0a3b48a0e Mon Sep 17 00:00:00 2001 From: Marek Vavrusa <marek@vavrusa.com> Date: Tue, 12 Oct 2010 16:34:26 +0200 Subject: [PATCH] Disabled non-blocking sockets by default, threads signal notification on SIGINT. --- src/server/socket-manager.c | 17 +++++++++++------ src/server/socket-manager.h | 2 +- 2 files changed, 12 insertions(+), 7 deletions(-) diff --git a/src/server/socket-manager.c b/src/server/socket-manager.c index ad5bf6404..20c46103d 100644 --- a/src/server/socket-manager.c +++ b/src/server/socket-manager.c @@ -15,6 +15,7 @@ #include <unistd.h> #include <assert.h> #include <arpa/inet.h> +#include <signal.h> //#define SM_DEBUG @@ -196,6 +197,10 @@ int sm_start( sm_manager* manager ) void sm_stop( sm_manager *manager ) { manager->is_running = 0; + pthread_kill(manager->master_dpt->threads[0], SIGALRM); + for(int i = 0; i < manager->workers_dpt->thread_count; ++i) { + pthread_kill(manager->workers_dpt->threads[i], SIGALRM); + } } int sm_wait( sm_manager* manager ) @@ -245,7 +250,7 @@ int sm_open( sm_manager *manager, unsigned short port, socket_t type ) // TCP needs listen if(type == TCP) { - res = listen(socket_new->socket, 5); /// \todo Tweak backlog size. + res = listen(socket_new->socket, 10); /// \todo Tweak backlog size. if (res == -1) { close(socket_new->socket); free(socket_new); @@ -373,11 +378,11 @@ int sm_add_event( int epfd, int socket, uint32_t events ) memset(&ev, 0, sizeof(struct epoll_event)); // All polled events should use non-blocking mode. - int old_flag = fcntl(socket, F_GETFL, 0); - if (fcntl(socket, F_SETFL, old_flag | O_NONBLOCK) == -1) { - log_error("error setting non-blocking mode on the socket.\n"); - return -1; - } + //int old_flag = fcntl(socket, F_GETFL, 0); + //if (fcntl(socket, F_SETFL, old_flag | O_NONBLOCK) == -1) { + // log_error("error setting non-blocking mode on the socket.\n"); + // return -1; + //} // Register to epoll ev.data.fd = socket; diff --git a/src/server/socket-manager.h b/src/server/socket-manager.h index 4ec618e97..858039e18 100644 --- a/src/server/socket-manager.h +++ b/src/server/socket-manager.h @@ -64,7 +64,7 @@ typedef struct sm_worker { */ typedef struct sm_manager { sm_socket* sockets; - volatile short is_running; /// \todo Implement notification via Linux eventfd() instead of is_running. + volatile short is_running; dpt_dispatcher *master_dpt; dpt_dispatcher *workers_dpt; sm_worker master; -- GitLab