+
+ return client;
+}
+
+static void
+ttt_server_destroy_client (ttt_server_t *server, ttt_client_t *client)
+{
+ int i;
+
+ pthread_mutex_lock (&server->mutex);
+
+ for (i = 0; i < server->num_clients; i++)
+ if (server->clients[i] == client)
+ break;
+
+ assert (i < server->num_clients);
+
+ printf ("Client %d has left.\n", client->id);
+
+ memmove (&server->clients[i], &server->clients[i+1],
+ (server->num_clients - i - 1) * sizeof (ttt_client_t *));
+
+ server->num_clients--;
+
+ ttt_client_destroy (client);
+
+ pthread_mutex_unlock (&server->mutex);
+}
+
+static void *
+_handle_client_requests_thread (void *closure)
+{
+ ttt_client_t *client = closure;
+ ttt_server_t *server = client->server;
+ char *request;
+
+ while (1) {
+
+ request = ttt_client_read_line (client);
+ if (request == NULL)
+ break;
+
+ ttt_server_broadcast (client->server, request);
+ }
+
+ ttt_server_destroy_client (server, client);
+
+ return (void *) 0;