diff --git a/Assignment-06/starter/rsh_server.c b/Assignment-06/starter/rsh_server.c
index 1f214c311bc496edcb2da861c75c00270a80ee2b..64198648242718f3a1c71a8d9a72d865161c6daa 100644
--- a/Assignment-06/starter/rsh_server.c
+++ b/Assignment-06/starter/rsh_server.c
@@ -308,101 +308,98 @@ int exec_client_requests(int cli_socket) {
     ssize_t recv_bytes;
     int rc = OK;
 
-    while (1) {
-        recv_bytes = recv(cli_socket, cmd_buff, RDSH_COMM_BUFF_SZ, 0);
-        if (recv_bytes <= 0) {
-            close(cli_socket);
-            printf("Client disconnected\n");
-            return OK;
-        }
+    printf("Waiting for client command...\n");
 
-        cmd_buff[recv_bytes] = '\0';
+    // Receive the command from the client
+    recv_bytes = recv(cli_socket, cmd_buff, RDSH_COMM_BUFF_SZ, 0);
+    if (recv_bytes <= 0) {
+        perror("recv");
+        close(cli_socket);
+        return ERR_RDSH_COMMUNICATION;
+    }
 
-        cmd_buff[strcspn(cmd_buff, "\n")] = '\0';
+    cmd_buff[recv_bytes] = '\0';
+    printf("Received command: %s\n", cmd_buff);
 
-        if (strlen(cmd_buff) == 0) {
-            send_message_string(cli_socket, CMD_WARN_NO_CMD);
-            send_message_eof(cli_socket);
-            rc = WARN_NO_CMDS;
-            continue;
+    // Execute the command
+    if (strstr(cmd_buff, "|") != NULL) {
+        // Handle pipeline commands
+        command_list_t cmd_list;
+        if (parse_pipeline(cmd_buff, &cmd_list) != OK) {
+            fprintf(stderr, "Error parsing pipeline\n");
+            return ERR_TOO_MANY_COMMANDS;
         }
 
-        if (strstr(cmd_buff, "|") != NULL) {
-            command_list_t cmd_list;
-            if (parse_pipeline(cmd_buff, &cmd_list) != OK) {
-                send_message_string(cli_socket, CMD_ERR_PIPE_LIMIT);
-                send_message_eof(cli_socket);
-                rc = ERR_TOO_MANY_COMMANDS;
-                continue;
-            }
-
-            rc = rsh_execute_pipeline(cli_socket, &cmd_list);
+        rc = rsh_execute_pipeline(cli_socket, &cmd_list);
 
-            for (int i = 0; i < cmd_list.num; i++) {
-                free(cmd_list.commands[i]._cmd_buffer);
-            }
-        } else {
-            cmd_buff_t cmd;
-            if (build_cmd_buff(cmd_buff, &cmd) != OK) {
-                send_message_string(cli_socket, CMD_ERR_PIPE_LIMIT);
-                send_message_eof(cli_socket);
-                rc = ERR_MEMORY;
-                continue;
-            }
+        for (int i = 0; i < cmd_list.num; i++) {
+            free(cmd_list.commands[i]._cmd_buffer);
+        }
+    } else {
+        // Handle single commands
+        cmd_buff_t cmd;
+        if (build_cmd_buff(cmd_buff, &cmd) != OK) {
+            fprintf(stderr, "Error building command buffer\n");
+            return ERR_MEMORY;
+        }
 
-            if (strcmp(cmd.argv[0], EXIT_CMD) == 0) {
-                free(cmd._cmd_buffer);
-                send_message_string(cli_socket, "Exiting...\n");
-                send_message_eof(cli_socket);
-                return OK;
-            } else if (strcmp(cmd.argv[0], "cd") == 0) {
-                if (cmd.argc == 1) {
-                    chdir(getenv("HOME"));
-                } else if (cmd.argc == 2) {
-                    if (chdir(cmd.argv[1]) != 0) {
-                        char error_msg[256];
-                        snprintf(error_msg, sizeof(error_msg), "cd: %s\n", strerror(errno));
-                        send_message_string(cli_socket, error_msg);
-                    }
-                } else {
-                    send_message_string(cli_socket, CMD_ERR_PIPE_LIMIT);
+        if (strcmp(cmd.argv[0], EXIT_CMD) == 0) {
+            free(cmd._cmd_buffer);
+            printf("Client requested exit\n");
+            return OK;
+        } else if (strcmp(cmd.argv[0], "cd") == 0) {
+            // Handle cd command
+            if (cmd.argc == 1) {
+                chdir(getenv("HOME"));
+            } else if (cmd.argc == 2) {
+                if (chdir(cmd.argv[1]) != 0) {
+                    perror("cd");
                 }
-                send_message_eof(cli_socket);
-                free(cmd._cmd_buffer);
-                continue;
+            } else {
+                fprintf(stderr, "cd: too many arguments\n");
             }
+            free(cmd._cmd_buffer);
+            return OK;
+        }
 
-            pid_t pid = fork();
-            if (pid < 0) {
-                perror("fork failed");
-                rc = ERR_MEMORY;
-            } else if (pid == 0) {
-                execvp(cmd.argv[0], cmd.argv);
-                perror("execvp failed");
-                exit(EXIT_FAILURE);
-            } else {
-                int status;
-                wait(&status);
-
-                if (WIFEXITED(status)) {
-                    if (WEXITSTATUS(status) != 0) {
-                        char error_msg[256];
-                        snprintf(error_msg, sizeof(error_msg), "Command failed with exit code %d\n", WEXITSTATUS(status));
-                        send_message_string(cli_socket, error_msg);
-                    }
+        // Fork and execute the command
+        pid_t pid = fork();
+        if (pid < 0) {
+            perror("fork failed");
+            return ERR_MEMORY;
+        } else if (pid == 0) {
+            // Child process: execute the command
+            dup2(cli_socket, STDOUT_FILENO);  // Redirect stdout to client socket
+            dup2(cli_socket, STDERR_FILENO);  // Redirect stderr to client socket
+            execvp(cmd.argv[0], cmd.argv);
+            perror("execvp failed");
+            exit(EXIT_FAILURE);
+        } else {
+            // Parent process: wait for the child to finish
+            int status;
+            wait(&status);
+
+            if (WIFEXITED(status)) {
+                if (WEXITSTATUS(status) != 0) {
+                    fprintf(stderr, "Command failed with exit code %d\n", WEXITSTATUS(status));
                 }
             }
-            free(cmd._cmd_buffer);
         }
-        send_message_eof(cli_socket);
+
+        free(cmd._cmd_buffer);
     }
 
+    // Send EOF to indicate end of response
+    send_message_eof(cli_socket);
+
+    printf("Command executed successfully\n");
     return rc;
 }
 
 
 
 
+
 /*
  * send_message_eof(cli_socket)
  *      cli_socket:  The server-side socket that is connected to the client