← cproj

HTTP server custom port

a8ad1725f230c92ce71a20c84f66a672286bbce2 · ovidiucs · Oct 13, 2019 19:10

+22 −9 · 2 files changed

  • graph/sockets/Makefile +3 −1
  • graph/sockets/http_server.c +19 −8
diff --git a/graph/sockets/Makefile b/graph/sockets/Makefile
index a5621c7..3765a77 100644
--- a/graph/sockets/Makefile
+++ b/graph/sockets/Makefile
@@ -5,7 +5,7 @@ BinName = http_server
 Libs = -lc
 
 # Options and arguments to the C compiler.
-CC = clang
+CC = clang --std=c11
 #CFLAGS = -g -funsigned-char -W -Wall -ggdb3 -Wunused\
 # -Wno-comment -Wno-missing-field-initializers -Wno-missing-braces -Wno-parentheses\
 # -Wno-pointer-sign -Wno-unused-parameter -Wno-unused-result $(COPTS)\
@@ -37,10 +37,12 @@ CFLAGS = -g \
 -Wredundant-decls \
 -Wshadow \
 -Wsign-conversion \
+-Wconversion \
 -Wstrict-overflow=5 \
 -Wstrict-prototypes \
 -Wswitch-default \
 -Wunreachable-code \
+-Wunused-macros \
 
 
 # Targets.
diff --git a/graph/sockets/http_server.c b/graph/sockets/http_server.c
index e377a49..06a5a8f 100644
--- a/graph/sockets/http_server.c
+++ b/graph/sockets/http_server.c
@@ -8,7 +8,7 @@
 #include <sys/types.h>
 #include <sys/socket.h>
 
-#define PORT 6969
+//#define PORT 6969
 
 
 char response[] = 
@@ -26,12 +26,23 @@ char response[] =
 // ----------------------------------------------------------------
 
 int main (int argc, char **argv) {
-      if (argc != 2) {
-      fprintf(stderr, "Usage: %s address\n", argv[0]);
+      if (argc < 2) {
+      fprintf(stderr, "Usage: %s <port>>\n", argv[0]);
       // Return error code
-      return 1;
+      exit(1);
 
      }
+     uint16_t port = 0;
+
+     {
+        char *endptr;
+        port = (uint16_t) strtoul(argv[1], &endptr, 10);
+
+        if (endptr == argv[1]) {
+            fprintf(stderr, "Invalid. %s is not a valid port number\n", argv[1]);
+            exit(1);
+        }
+     }
 
     // 1. Create the socket
     int server_fd =  socket (AF_INET, SOCK_STREAM, 0);
@@ -45,10 +56,10 @@ int main (int argc, char **argv) {
 
     memset(&serverAddr, 0, sizeof(serverAddr));
     serverAddr.sin_family = AF_INET;
-    serverAddr.sin_port = htons(PORT);
+    serverAddr.sin_port = htons(port);
 
     // 2. Bind the socket
-    int err = bind (server_fd, (struct sockaddr*) &serverAddr, sizeof(serverAddr));
+    ssize_t err = bind (server_fd, (struct sockaddr*) &serverAddr, sizeof(serverAddr));
     if (err < 0) {
         fprintf (stderr, "Could not bind socket %s\n", strerror (errno));
         exit(1);
@@ -58,14 +69,14 @@ int main (int argc, char **argv) {
     // backlog - number of connection we want to support in queue
     err = listen(server_fd, 69);
     if (err < 0) {
-        fprintf (stderr, "Could not listen to socket %s\n", strerror (err));
+        fprintf (stderr, "Could not listen to socket %s\n", strerror (errno));
         exit(1);
     }
 
     //4. Keep accepting connections
     // we will get back a file descriptor 
     for (;;) {
-        
+
         struct sockaddr_in clientAddr;
         socklen_t clientAddrLen = 0;