| summaryrefslogtreecommitdiff |
diff options
Diffstat (limited to 'src/server')
| -rw-r--r-- | src/server/server.c | 11 | ||||
| -rw-r--r-- | src/server/server_create_socket.c | 22 | ||||
| -rw-r--r-- | src/server/server_initialize.c | 8 | ||||
| -rw-r--r-- | src/server/server_joining_threads.c | 2 | ||||
| -rw-r--r-- | src/server/server_new_connection.c | 17 | ||||
| -rw-r--r-- | src/server/server_types.h | 2 | ||||
| -rw-r--r-- | src/server/server_wait_for_event.c | 15 | ||||
| -rw-r--r-- | src/server/server_worker.c | 17 | ||||
| -rw-r--r-- | src/server/server_worker_handle_request.c | 4 | ||||
| -rw-r--r-- | src/server/server_worker_receive.c | 20 | ||||
| -rw-r--r-- | src/server/server_worker_send.c | 112 |
11 files changed, 187 insertions, 43 deletions
diff --git a/src/server/server.c b/src/server/server.c index edd1bd7..30c6bff 100644 --- a/src/server/server.c +++ b/src/server/server.c @@ -29,6 +29,7 @@ int ZoO_server_main switch (ZoO_server_wait_for_event(&server)) { case 0: /* Timed out or signal'd. */ + ZoO_S_DEBUG(stderr, 1, "Timed out..."); ZoO_server_handle_joining_threads(&server); retries = 0; @@ -36,6 +37,7 @@ int ZoO_server_main break; case 1: /* New client attempted connection. */ + ZoO_S_DEBUG(stderr, 1, "New connection."); ZoO_server_handle_joining_threads(&server); (void) ZoO_server_handle_new_connection(&server); @@ -54,6 +56,15 @@ int ZoO_server_main } break; + + default: + ZoO_S_PROG_ERROR + ( + stderr, + "Unexpected wait_for_event return value." + ); + + break; } } diff --git a/src/server/server_create_socket.c b/src/server/server_create_socket.c index 77e55b7..d7b17b6 100644 --- a/src/server/server_create_socket.c +++ b/src/server/server_create_socket.c @@ -7,6 +7,8 @@ #include <sys/socket.h> #include <sys/un.h> +#include "../error/error.h" + #include "server.h" static int create_socket (int result [const restrict static 1]) @@ -18,10 +20,10 @@ static int create_socket (int result [const restrict static 1]) if (*result == -1) { - fprintf + ZoO_FATAL ( stderr, - "[F] Unable to create server socket: %s.\n", + "Unable to create server socket: %s.", strerror(errno) ); @@ -64,10 +66,10 @@ static int bind_socket ) != 0 ) { - fprintf + ZoO_FATAL ( stderr, - "[F] Unable to bind server socket to %s: %s.\n", + "Unable to bind server socket to %s: %s.", socket_name, strerror(errno) ); @@ -91,10 +93,10 @@ static int set_socket_to_unblocking (const int socket) if (current_flags == -1) { - fprintf + ZoO_FATAL ( stderr, - "[F] Unable to get server socket properties: %s.\n", + "Unable to get server socket properties: %s.", strerror(errno) ); @@ -109,10 +111,10 @@ static int set_socket_to_unblocking (const int socket) if (current_flags == -1) { - fprintf + ZoO_FATAL ( stderr, - "[F] Unable to set server socket properties: %s.\n", + "Unable to set server socket properties: %s.", strerror(errno) ); @@ -132,10 +134,10 @@ static int set_socket_as_listener (const int socket) if (listen(socket, ZoO_SERVER_SOCKET_LISTEN_BACKLOG) != 0) { - fprintf + ZoO_FATAL ( stderr, - "[F] Unable to set server socket properties: %s.\n", + "Unable to set server socket properties: %s.", strerror(errno) ); diff --git a/src/server/server_initialize.c b/src/server/server_initialize.c index e0632a4..c4800cd 100644 --- a/src/server/server_initialize.c +++ b/src/server/server_initialize.c @@ -28,10 +28,10 @@ static int initialize_worker_collection if (error != 0) { - fprintf + ZoO_FATAL ( stderr, - "[F] Unable to initialize worker collection's mutex: %s.\n", + "Unable to initialize worker collection's mutex: %s.", strerror(error) ); @@ -48,10 +48,10 @@ static int initialize_worker_collection if (error != 0) { - fprintf + ZoO_FATAL ( stderr, - "[F] Unable to initialize worker collection's barrier: %s.\n", + "[F] Unable to initialize worker collection's barrier: %s.", strerror(error) ); diff --git a/src/server/server_joining_threads.c b/src/server/server_joining_threads.c index 48b5ac6..6db056c 100644 --- a/src/server/server_joining_threads.c +++ b/src/server/server_joining_threads.c @@ -24,6 +24,8 @@ void ZoO_server_handle_joining_threads { if (server->workers.threads[i].state == ZoO_SERVER_JOINING_THREAD) { + ZoO_DEBUG(stderr, 1, "Joining thread %u", i); + pthread_join(server->workers.threads[i].posix_id, (void **) NULL); server->workers.threads[i].state = ZoO_SERVER_NO_THREAD; diff --git a/src/server/server_new_connection.c b/src/server/server_new_connection.c index 46b38fc..c29b896 100644 --- a/src/server/server_new_connection.c +++ b/src/server/server_new_connection.c @@ -25,10 +25,10 @@ static int get_new_socket (struct ZoO_server server [const restrict static 1]) if (server->thread_params.socket == -1) { - fprintf + ZoO_ERROR ( stderr, - "[E] Unable to accept on the server's socket: %s.\n", + "Unable to accept on the server's socket: %s.", strerror(errno) ); @@ -71,11 +71,10 @@ static int get_new_thread (struct ZoO_server server [const restrict static 1]) ) ) { - fprintf + ZoO_S_ERROR ( stderr, - "[E] Maximum number of concurrent threads attained, unable to add" - " more.\n" + "Maximum number of concurrent threads attained, unable to add more." ); pthread_mutex_unlock(&(server->workers.mutex)); @@ -98,10 +97,10 @@ static int get_new_thread (struct ZoO_server server [const restrict static 1]) if (new_threads == ((struct ZoO_server_thread_data *) NULL)) { - fprintf + ZoO_S_ERROR ( stderr, - "[E] Reallocation of the threads' data list failed.\n" + "Reallocation of the threads' data list failed." ); pthread_mutex_unlock(&(server->workers.mutex)); @@ -134,10 +133,10 @@ static int spawn_thread (struct ZoO_server server [const restrict static 1]) if (error != 0) { - fprintf + ZoO_ERROR ( stderr, - "[E] Unable to spawn thread: %s.\n", + "Unable to spawn thread: %s.", strerror(error) ); diff --git a/src/server/server_types.h b/src/server/server_types.h index a6fb875..29f9bbb 100644 --- a/src/server/server_types.h +++ b/src/server/server_types.h @@ -18,7 +18,7 @@ #define ZoO_SERVER_MAX_RETRIES 10 #define ZoO_SERVER_BUFFER_SIZE 0 -#define ZoO_SERVER_SOCKET_ACCEPT_TIMEOUT_SEC 60 +#define ZoO_SERVER_SOCKET_ACCEPT_TIMEOUT_SEC 5 #define ZoO_SERVER_SOCKET_LISTEN_BACKLOG 5 enum ZoO_server_thread_state diff --git a/src/server/server_wait_for_event.c b/src/server/server_wait_for_event.c index b229e6b..015592a 100644 --- a/src/server/server_wait_for_event.c +++ b/src/server/server_wait_for_event.c @@ -4,6 +4,8 @@ #include <stdio.h> #include <string.h> +#include "../error/error.h" + #include "server.h" int ZoO_server_wait_for_event @@ -13,21 +15,28 @@ int ZoO_server_wait_for_event { int ready_fds; const int old_errno = errno; + fd_set ready_to_read; + + ready_to_read = server->socket.as_a_set; /* call to select may alter timeout */ memset((void *) &(server->socket.timeout), 0, sizeof(struct timeval)); server->socket.timeout.tv_sec = ZoO_SERVER_SOCKET_ACCEPT_TIMEOUT_SEC; + errno = 0; + ready_fds = select ( (server->socket.file_descriptor + 1), - &(server->socket.as_a_set), + &ready_to_read, (fd_set *) NULL, (fd_set *) NULL, &(server->socket.timeout) ); + ZoO_DEBUG(stderr, 1, "SELECT returned: %i, errno is %i.", ready_fds, errno); + if (errno == EINTR) { ready_fds = 0; @@ -35,10 +44,10 @@ int ZoO_server_wait_for_event if (ready_fds == -1) { - fprintf + ZoO_FATAL ( stderr, - "[F] Unable to wait on server socket: %s.\n", + "Unable to wait on server socket: %s.", strerror(errno) ); diff --git a/src/server/server_worker.c b/src/server/server_worker.c index c96f92e..e1118e8 100644 --- a/src/server/server_worker.c +++ b/src/server/server_worker.c @@ -1,6 +1,7 @@ #include <stdlib.h> #include <string.h> #include <stdio.h> +#include <errno.h> #include "server.h" @@ -10,6 +11,8 @@ static int initialize void * input ) { + const int old_errno = errno; + memcpy ( (void *) &(worker->params), @@ -29,12 +32,24 @@ static int initialize worker->socket_as_file = fdopen(worker->params.socket, "w+"); + errno = 0; + if (worker->socket_as_file == (FILE *) NULL) { - /* TODO: error message? */ + ZoO_ERROR + ( + stderr, + "Unable to open client socket as a file stream: %s.", + strerror(errno) + ); + + errno = old_errno; + return -1; } + errno = old_errno; + return 0; } diff --git a/src/server/server_worker_handle_request.c b/src/server/server_worker_handle_request.c index a1450df..09d08f4 100644 --- a/src/server/server_worker_handle_request.c +++ b/src/server/server_worker_handle_request.c @@ -42,14 +42,14 @@ static int load_reply ) < 0 ) { - ZoO_S_ERROR(worker->socket_as_file, "Could not find rarest word."); - ZoO_knowledge_unlock_access ( worker->params.knowledge, worker->socket_as_file ); + ZoO_S_ERROR(worker->socket_as_file, "Could not find rarest word."); + return -1; } diff --git a/src/server/server_worker_receive.c b/src/server/server_worker_receive.c index 10944a9..5b4edc3 100644 --- a/src/server/server_worker_receive.c +++ b/src/server/server_worker_receive.c @@ -1,3 +1,9 @@ +#include <stdio.h> +#include <string.h> +#include <errno.h> + +#include "../error/error.h" + #include "server.h" int ZoO_server_worker_receive @@ -5,8 +11,11 @@ int ZoO_server_worker_receive struct ZoO_server_worker worker [const restrict static 1] ) { + const int old_errno = errno; ssize_t received; + errno = 0; + received = getline ( @@ -17,11 +26,20 @@ int ZoO_server_worker_receive if (received == -1) { - /* TODO: error message? */ + ZoO_ERROR + ( + stderr, + "Thread could not receive from socket: %s.", + strerror(errno) + ); + + errno = old_errno; return -1; } + errno = old_errno; + worker->buffer_length = (size_t) received; return 0; diff --git a/src/server/server_worker_send.c b/src/server/server_worker_send.c index 6ba6d67..4662fa9 100644 --- a/src/server/server_worker_send.c +++ b/src/server/server_worker_send.c @@ -1,4 +1,7 @@ -#include "../pervasive.h" +#include <stdio.h> +#include <string.h> + +#include "../error/error.h" #include "server.h" @@ -11,9 +14,24 @@ int ZoO_server_worker_send_confirm_protocol_version err = fprintf(worker->socket_as_file, "!CPV 1\n"); - if (err <= 0) + if (err == 0) + { + ZoO_S_ERROR + ( + stderr, + "Thread could not write anything to socket." + ); + + return -1; + } + else if (err < 0) { - /* TODO: error message? */ + ZoO_ERROR + ( + stderr, + "Thread could not write to socket: %s.", + strerror(err) + ); return -1; } @@ -30,9 +48,24 @@ int ZoO_server_worker_send_positive err = fprintf(worker->socket_as_file, "!P\n"); - if (err <= 0) + if (err == 0) + { + ZoO_S_ERROR + ( + stderr, + "Thread could not write anything to socket." + ); + + return -1; + } + else if (err < 0) { - /* TODO: error message? */ + ZoO_ERROR + ( + stderr, + "Thread could not write to socket: %s.", + strerror(err) + ); return -1; } @@ -49,9 +82,24 @@ int ZoO_server_worker_send_negative err = fprintf(worker->socket_as_file, "!N\n"); - if (err <= 0) + if (err == 0) + { + ZoO_S_ERROR + ( + stderr, + "Thread could not write anything to socket." + ); + + return -1; + } + else if (err < 0) { - /* TODO: error message? */ + ZoO_ERROR + ( + stderr, + "Thread could not write to socket: %s.", + strerror(err) + ); return -1; } @@ -66,16 +114,30 @@ int ZoO_server_worker_send_generated_reply { int err; - /* TODO */ err = fputs ( "!GR ", worker->socket_as_file ); - if (err <= 0) + if (err == 0) + { + ZoO_S_ERROR + ( + stderr, + "Thread could not write anything to socket." + ); + + return -1; + } + else if (err < 0) { - /* TODO: error message? */ + ZoO_ERROR + ( + stderr, + "Thread could not write to socket: %s.", + strerror(err) + ); return -1; } @@ -89,15 +151,41 @@ int ZoO_server_worker_send_generated_reply worker->socket_as_file ); + if (err == 0) + { + ZoO_S_ERROR + ( + stderr, + "Thread could not write anything to socket." + ); + + return -1; + } + else if (err < 0) + { + ZoO_ERROR + ( + stderr, + "Thread could not write to socket: %s.", + strerror(err) + ); + + return -1; + } + err = fputs ( "\n", worker->socket_as_file ); - if (err <= 0) + if (err == 0) { - /* TODO: error message? */ + ZoO_S_ERROR + ( + stderr, + "Thread could not write anything to socket." + ); return -1; } |


