summaryrefslogtreecommitdiffstats
path: root/bin/nserver.c
diff options
context:
space:
mode:
authorrsiddharth <s@ricketyspace.net>2020-04-18 22:06:02 -0400
committerrsiddharth <s@ricketyspace.net>2020-04-18 22:06:02 -0400
commit8a279d818020306f0d6e055971b3c763527091ea (patch)
treee6d5e06572ad63ab5056759738d47115a2c704f1 /bin/nserver.c
parent881cee2229dc166af63d4f464799f4e73309d6e4 (diff)
bin/statserve.c -> bin/nserver.c
Diffstat (limited to 'bin/nserver.c')
-rw-r--r--bin/nserver.c54
1 files changed, 54 insertions, 0 deletions
diff --git a/bin/nserver.c b/bin/nserver.c
new file mode 100644
index 0000000..8c05e7d
--- /dev/null
+++ b/bin/nserver.c
@@ -0,0 +1,54 @@
+/* SPDX-License-Identifier: BSD-3-Clause */
+/*
+ * Copyright © 2020 rsiddharth <s@ricketyspace.net>
+ */
+
+#include <nserve.h>
+#include <nsocket.h>
+
+#define BACKLOG 10
+
+int main(void)
+{
+ int rc = 0;
+ int sockfd_s = 0, sockfd_c = 0;
+ struct sockaddr sockaddr_c;
+ socklen_t sockaddr_c_len;
+ pid_t pidc;
+
+ sockfd_s = get_socket();
+ check(sockfd_s > 0, "nserver: unable to get socket");
+
+ rc = listen(sockfd_s, BACKLOG);
+ check(rc == 0, "nserver: listen failed");
+
+ do {
+ printf("Waiting for connection...\n");
+ sockfd_c = accept(sockfd_s, &sockaddr_c, &sockaddr_c_len);
+
+ pidc = fork();
+ check(pidc != -1, "nserver: fork failed");
+
+ if (pidc == 0) {
+ nserve(sockfd_c);
+ }
+
+ rc = close(sockfd_c);
+ check(rc == 0, "nserver: close failed");
+ } while(1);
+
+ rc = close(sockfd_s);
+ check(rc == 0, "nserver: close failed");
+
+ return 0;
+
+ error:
+ if (sockfd_s) {
+ rc = close(sockfd_s);
+ }
+ if (sockfd_c) {
+ rc = close(sockfd_c);
+ }
+
+ return -1;
+}