From 4ec5ab7a14c53ede7e6accd291bb83192dba0d24 Mon Sep 17 00:00:00 2001
From: jl4589 <jl4589@drexel.edu>
Date: Wed, 12 Mar 2025 19:44:35 -0400
Subject: [PATCH] Impmeneted boot server hopefully

---
 Assignment-06/starter/dshlib.c     |  6 ++++++
 Assignment-06/starter/rsh_server.c | 34 ++++++++++++++++++++++++------
 2 files changed, 33 insertions(+), 7 deletions(-)

diff --git a/Assignment-06/starter/dshlib.c b/Assignment-06/starter/dshlib.c
index 192dd90..9fa4c8b 100644
--- a/Assignment-06/starter/dshlib.c
+++ b/Assignment-06/starter/dshlib.c
@@ -206,6 +206,12 @@ int execute_pipeline(command_list_t *clist) {
     return OK;
 }
 
+static void start_server() {
+    int listen_socket;
+    int ret;
+
+}
+
 /**** 
  **** FOR REMOTE SHELL USE YOUR SOLUTION FROM SHELL PART 3 HERE
  **** THE MAIN FUNCTION CALLS THIS ONE AS ITS ENTRY POINT TO
diff --git a/Assignment-06/starter/rsh_server.c b/Assignment-06/starter/rsh_server.c
index 7a5fb74..29473d5 100644
--- a/Assignment-06/starter/rsh_server.c
+++ b/Assignment-06/starter/rsh_server.c
@@ -50,11 +50,6 @@ int start_server(char *ifaces, int port, int is_threaded){
     int svr_socket;
     int rc;
 
-    //
-    //TODO:  If you are implementing the extra credit, please add logic
-    //       to keep track of is_threaded to handle this feature
-    //
-
     svr_socket = boot_server(ifaces, port);
     if (svr_socket < 0){
         int err_code = svr_socket;  //server socket will carry error code
@@ -117,11 +112,35 @@ int stop_server(int svr_socket){
 int boot_server(char *ifaces, int port){
     int svr_socket;
     int ret;
-    
     struct sockaddr_in addr;
 
     // TODO set up the socket - this is very similar to the demo code
 
+    svr_socket = socket(AF_INET, SOCK_STREAM, 0);
+    if (svr_socket == -1) {
+        perror("socket");
+        return ERR_RDSH_SERVER;
+    }
+
+    int enable = 1;
+    if (setsockopt(svr_socket, SOL_SOCKET, SO_REUSEADDR, &enable, sizeof(int)) < 0) {
+        perror("setsockopt");
+        close(svr_socket);
+        return ERR_RDSH_SERVER;
+    }
+
+    addr.sin_family = AF_INET;
+    addr.sin_addr.s_addr = inet_addr(ifaces); 
+    addr.sin_port = htons(port);
+
+    ret = bind(svr_socket, (const struct sockaddr *) &addr, sizeof(struct sockaddr_in));
+
+    if (ret == -1 ) { 
+        perror("bind");
+        close(svr_socket);
+        return ERR_RDSH_SERVER;
+    }
+
     /*
      * Prepare for accepting connections. The backlog size is set
      * to 20. So while one request is being processed other requests
@@ -132,7 +151,8 @@ int boot_server(char *ifaces, int port){
         perror("listen");
         return ERR_RDSH_COMMUNICATION;
     }
-
+    
+    printf("SERVER BOOTED on %s:%d\n", ifaces, port);
     return svr_socket;
 }
 
-- 
GitLab