summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
Diffstat (limited to 'src/server')
-rw-r--r--src/server/server.c11
-rw-r--r--src/server/server_create_socket.c22
-rw-r--r--src/server/server_initialize.c8
-rw-r--r--src/server/server_joining_threads.c2
-rw-r--r--src/server/server_new_connection.c17
-rw-r--r--src/server/server_types.h2
-rw-r--r--src/server/server_wait_for_event.c15
-rw-r--r--src/server/server_worker.c17
-rw-r--r--src/server/server_worker_handle_request.c4
-rw-r--r--src/server/server_worker_receive.c20
-rw-r--r--src/server/server_worker_send.c112
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;
}