| 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();  }  /******************************************************************************/ | 


