| summaryrefslogtreecommitdiff | 
diff options
| author | nsensfel <SpamShield0@noot-noot.org> | 2020-01-07 11:06:51 +0100 | 
|---|---|---|
| committer | nsensfel <SpamShield0@noot-noot.org> | 2020-01-07 11:06:51 +0100 | 
| commit | 99fc3898606bf9bc2a732facffc1a6fe6bfcf3a2 (patch) | |
| tree | 7ca296de2a78a500b838d9a5d5a5fa3c0523fa18 /src/server/communication_thread.c | |
| parent | 11138ae4e8e3ed2f01156189923f7904c8f21591 (diff) | |
...
Diffstat (limited to 'src/server/communication_thread.c')
| -rw-r--r-- | src/server/communication_thread.c | 40 | 
1 files changed, 39 insertions, 1 deletions
| 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); | 


