| summaryrefslogtreecommitdiff | 
diff options
Diffstat (limited to 'src/server')
| -rw-r--r-- | src/server/server.c | 4 | ||||
| -rw-r--r-- | src/server/server.h | 2 | ||||
| -rw-r--r-- | src/server/server_types.h | 10 | ||||
| -rw-r--r-- | src/server/server_worker.c | 31 | ||||
| -rw-r--r-- | src/server/server_worker_receive.c | 20 | 
5 files changed, 59 insertions, 8 deletions
diff --git a/src/server/server.c b/src/server/server.c index 874f5eb..197faf6 100644 --- a/src/server/server.c +++ b/src/server/server.c @@ -26,7 +26,7 @@ int ZoO_server_main     while (ZoO_server_is_running())     { -      switch (ZoO_server_wait_for_new_event(&server)) +      switch (ZoO_server_wait_for_event(&server))        {           case 0: /* Timed out or signal'd. */              ZoO_server_handle_joining_threads(&server); @@ -60,7 +60,7 @@ int ZoO_server_main     /* Waiting for the threads to join... */     while (server.workers.currently_running > 0)     { -      switch (ZoO_server_wait_for_new_event(&server)) +      switch (ZoO_server_wait_for_event(&server))        {           case 0: /* Timed out. */           case 1: /* New client attempted connection. */ diff --git a/src/server/server.h b/src/server/server.h index 36ec4ce..90103ed 100644 --- a/src/server/server.h +++ b/src/server/server.h @@ -28,7 +28,7 @@ int ZoO_server_main  void ZoO_server_finalize (struct ZoO_server [const restrict static 1]); -int ZoO_server_wait_for_new_event +int ZoO_server_wait_for_event  (     struct ZoO_server server [const restrict static 1]  ); diff --git a/src/server/server_types.h b/src/server/server_types.h index fb78b77..1ba9f96 100644 --- a/src/server/server_types.h +++ b/src/server/server_types.h @@ -7,7 +7,11 @@     #include <pthread.h>  #endif -#include "../core/index.h" +#include "../core/index_types.h" + +#include "../knowledge/knowledge_types.h" + +#include "../parameters/parameters_types.h"  #include "../pipe/pipe_types.h" @@ -54,16 +58,18 @@ struct ZoO_server_thread_parameters  {     struct ZoO_server_thread_collection * thread_collection;     const struct ZoO_parameters * server_params; +   struct ZoO_knowledge * knowledge;     ZoO_index thread_id;     int socket;  };  struct ZoO_server_worker  { +   struct ZoO_server_thread_parameters params;     char * buffer;     size_t buffer_capacity;     size_t buffer_length; -   struct ZoO_server_thread_parameters params; +   FILE * socket_as_file;  };  struct ZoO_server diff --git a/src/server/server_worker.c b/src/server/server_worker.c index f6378e0..bd3b5d1 100644 --- a/src/server/server_worker.c +++ b/src/server/server_worker.c @@ -1,10 +1,10 @@ -#include <signal.h> +#include <stdlib.h>  #include <string.h>  #include <stdio.h>  #include "server.h" -static void initialize +static int initialize  (     struct ZoO_server_worker worker [const restrict static 1],     void * input @@ -22,6 +22,16 @@ static void initialize     worker->buffer = (char *) NULL;     worker->buffer_capacity = 0;     worker->buffer_length = 0; + +   worker->socket_as_file = fdopen(worker->params.socket, "w+"); + +   if (worker->socket_as_file == (FILE *) NULL) +   { +      /* TODO: error message? */ +      return -1; +   } + +   return 0;  }  static void finalize @@ -29,6 +39,23 @@ static void finalize     struct ZoO_server_worker worker [const restrict static 1]  )  { +   if (worker->socket_as_file != (FILE *) NULL) +   { +      fclose(worker->socket_as_file); + +      worker->socket_as_file = NULL; +   } + +   if (worker->buffer != (char *) NULL) +   { +      free((void *) worker->buffer); + +      worker->buffer = (char *) NULL; +   } + +   worker->buffer_capacity = 0; +   worker->buffer_length = 0; +     pthread_mutex_lock(&(worker->params.thread_collection->mutex));     worker->params.thread_collection->threads[worker->params.thread_id].state = diff --git a/src/server/server_worker_receive.c b/src/server/server_worker_receive.c index 6e70159..4dc2fc7 100644 --- a/src/server/server_worker_receive.c +++ b/src/server/server_worker_receive.c @@ -1,11 +1,29 @@  #include "server.h" +  int ZoO_server_worker_receive  (     struct ZoO_server_worker worker [const restrict static 1]  )  { -   /* TODO */ +   ssize_t received; + +   received = +      getline +      ( +         &(worker->buffer), +         &(worker->buffer_capacity), +         worker->socket_as_file +      ); + +   if (received == -1) +   { +      /* TODO: error message? */ + +      return -1; +   } + +   worker->buffer_length = (size_t) received;     return 0;  }  | 


