| summaryrefslogtreecommitdiff |
diff options
Diffstat (limited to 'src/server')
| -rw-r--r-- | src/server/communication_node.c | 33 | ||||
| -rw-r--r-- | src/server/communication_thread.c | 40 | ||||
| -rw-r--r-- | src/server/handle_client.c | 7 | ||||
| -rw-r--r-- | src/server/interruption.c | 4 | ||||
| -rw-r--r-- | src/server/server.c | 3 |
5 files changed, 81 insertions, 6 deletions
diff --git a/src/server/communication_node.c b/src/server/communication_node.c index c621f06..46b5f08 100644 --- a/src/server/communication_node.c +++ b/src/server/communication_node.c @@ -164,3 +164,36 @@ int relabsd_server_create_communication_node return 0; } + +void relabsd_server_destroy_communication_node +( + const char socket_name [const restrict static 1], + const int socket +) +{ + errno = 0; + + if (close(socket) == -1) + { + RELABSD_WARNING + ( + "Could not properly close the communication socket: %s.", + strerror(errno) + ); + } + + errno = 0; + + if (remove(socket_name) == -1) + { + RELABSD_ERROR + ( + "Could not remove communication node %s. Please delete it manually." + " Error: %s.", + socket_name, + strerror(errno) + ); + } + + RELABSD_S_DEBUG(RELABSD_DEBUG_PROGRAM_FLOW, "Destroyed communication node."); +} diff --git a/src/server/communication_thread.c b/src/server/communication_thread.c index cc91065..fd8f5cf 100644 --- a/src/server/communication_thread.c +++ b/src/server/communication_thread.c @@ -1,4 +1,8 @@ /**** POSIX *******************************************************************/ +#include <sys/select.h> +#include <sys/socket.h> + +#include <errno.h> #include <pthread.h> #include <string.h> @@ -6,6 +10,8 @@ #include <relabsd/debug.h> #include <relabsd/server.h> +#include <relabsd/config/parameters.h> + /******************************************************************************/ /**** LOCAL FUNCTIONS *********************************************************/ /******************************************************************************/ @@ -48,6 +54,8 @@ static void main_loop (struct relabsd_server server [const static 1]) FD_SET(communication_socket, &ready_to_read); FD_SET(interrupt_fd, &ready_to_read); + errno = 0; + ready_fds = select ( @@ -58,10 +66,30 @@ static void main_loop (struct relabsd_server server [const static 1]) (struct timeval *) NULL ); + if (ready_fds == -1) + { + RELABSD_ERROR + ( + "Unable to select on the server's socket: %s.", + strerror(errno) + ); + + relabsd_server_interrupt(); + } + /* TODO: select error handling. */ if (!relabsd_server_keep_running()) { + relabsd_server_destroy_communication_node + ( + relabsd_parameters_get_communication_node_name + ( + &(server->parameters) + ), + communication_socket + ); + return; } @@ -83,7 +111,17 @@ static void main_loop (struct relabsd_server server [const static 1]) strerror(errno) ); - return -1; + relabsd_server_interrupt(); + relabsd_server_destroy_communication_node + ( + relabsd_parameters_get_communication_node_name + ( + &(server->parameters) + ), + communication_socket + ); + + return; } (void) relabsd_server_handle_client(current_client_socket, server); diff --git a/src/server/handle_client.c b/src/server/handle_client.c index 696725b..a5eb7f7 100644 --- a/src/server/handle_client.c +++ b/src/server/handle_client.c @@ -9,6 +9,7 @@ #include <stdio.h> #include <stdlib.h> #include <string.h> +#include <unistd.h> /**** RELABSD *****************************************************************/ #include <relabsd/debug.h> @@ -19,9 +20,9 @@ /******************************************************************************/ static void handle_input ( - const ssize_t input_size, - const char input [const static 1], - struct relabsd_server server [const static 1] + const ssize_t input_size __attribute__((unused)), + const char input [const static 1] __attribute__((unused)), + struct relabsd_server server [const static 1] __attribute__((unused)) ) { } diff --git a/src/server/interruption.c b/src/server/interruption.c index 32cda53..7dabd3d 100644 --- a/src/server/interruption.c +++ b/src/server/interruption.c @@ -19,7 +19,7 @@ static void interrupt (int unused_mandatory_parameter __attribute__((unused))) errno = 0; - if (write(RELABSD_INTERRUPTION_PIPES[0], (void *) "!", (size_t) 1) == -1) + if (write(RELABSD_INTERRUPTION_PIPES[1], (void *) "!", (size_t) 1) == -1) { RELABSD_ERROR ( @@ -82,5 +82,5 @@ void relabsd_server_finalize_signal_handlers (void) int relabsd_server_get_interruption_file_descriptor (void) { - return RELABSD_INTERRUPTION_PIPES[1]; + return RELABSD_INTERRUPTION_PIPES[0]; } diff --git a/src/server/server.c b/src/server/server.c index 1b17d12..223e57a 100644 --- a/src/server/server.c +++ b/src/server/server.c @@ -21,6 +21,8 @@ static int initialize { int err; + relabsd_server_initialize_signal_handlers(); + if ( relabsd_physical_device_open @@ -97,6 +99,7 @@ static void finalize (struct relabsd_server server [const static 1]) relabsd_physical_device_close(&(server->physical_device)); (void) pthread_mutex_destroy(&(server->mutex)); + relabsd_server_finalize_signal_handlers(); } /******************************************************************************/ |


