aboutsummaryrefslogtreecommitdiff
path: root/src/server.c
diff options
context:
space:
mode:
Diffstat (limited to 'src/server.c')
-rw-r--r--src/server.c18
1 files changed, 10 insertions, 8 deletions
diff --git a/src/server.c b/src/server.c
index e727d19..6089317 100644
--- a/src/server.c
+++ b/src/server.c
@@ -18,7 +18,7 @@
#include "netcosm.h"
-#define PORT 1234
+#define PORT 1333
#define BACKLOG 16
void __attribute__((noreturn)) error(const char *fmt, ...)
@@ -33,6 +33,8 @@ void __attribute__((noreturn)) error(const char *fmt, ...)
exit(EXIT_FAILURE);
}
+int num_clients = 0;
+
void sigchld_handler(int s)
{
// waitpid() might overwrite errno, so we save and restore it:
@@ -41,6 +43,8 @@ void sigchld_handler(int s)
while(waitpid(-1, NULL, WNOHANG) > 0);
errno = saved_errno;
+
+ --num_clients;
}
int port;
@@ -68,6 +72,7 @@ void sigint_handler(int sig)
int main(int argc, char *argv[])
{
port = PORT;
+ srand(time(0));
int sock = socket(AF_INET, SOCK_STREAM, 0);
if(sock<0)
@@ -104,8 +109,6 @@ int main(int argc, char *argv[])
signal(SIGINT, sigint_handler);
- int num_clients = 0;
-
if(access(USERFILE, F_OK) < 0)
first_run_setup();
@@ -114,26 +117,25 @@ int main(int argc, char *argv[])
while(1)
{
struct sockaddr_in client;
- socklen_t client_len;
+ socklen_t client_len = sizeof(client);
int new_sock = accept(sock, (struct sockaddr*) &client, &client_len);
if(new_sock < 0)
error("accept");
+ ++num_clients;
+
pid_t pid = fork();
if(pid < 0)
error("fork");
+
if(!pid)
{
close(sock);
server_socket = new_sock;
- ++num_clients;
-
handle_client(new_sock, &client, num_clients);
- --num_clients;
-
exit(0);
}
else