summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--02_exercise/CMakeLists.txt2
-rw-r--r--03_exercise/.srv_pid2
-rw-r--r--03_exercise/CMakeLists.txt4
-rwxr-xr-x03_exercise/cli/clientbin31992 -> 35192 bytes
-rw-r--r--03_exercise/echo_server/Makefile22
-rw-r--r--03_exercise/echo_server/client.c47
-rw-r--r--03_exercise/echo_server/server.c53
-rw-r--r--03_exercise/srv/shell.c11
8 files changed, 11 insertions, 130 deletions
diff --git a/02_exercise/CMakeLists.txt b/02_exercise/CMakeLists.txt
index c5ef1e1..6bc45c6 100644
--- a/02_exercise/CMakeLists.txt
+++ b/02_exercise/CMakeLists.txt
@@ -7,8 +7,6 @@ set(CMAKE_C_STANDARD 11)
set(CMAKE_C_STANDARD_REQUIRED True)
add_compile_definitions(_GNU_SOURCE)
-find_package(Sanitizers)
-
add_executable(prog prog.c)
add_executable(shell shell.c)
diff --git a/03_exercise/.srv_pid b/03_exercise/.srv_pid
index 156e8ad..af9bc34 100644
--- a/03_exercise/.srv_pid
+++ b/03_exercise/.srv_pid
@@ -1 +1 @@
-341971
+4125
diff --git a/03_exercise/CMakeLists.txt b/03_exercise/CMakeLists.txt
index e72de65..aaac1eb 100644
--- a/03_exercise/CMakeLists.txt
+++ b/03_exercise/CMakeLists.txt
@@ -7,10 +7,8 @@ set(CMAKE_C_STANDARD 11)
set(CMAKE_C_STANDARD_REQUIRED True)
add_compile_definitions(_GNU_SOURCE)
-find_package(Sanitizers)
-
add_executable(client cli/client.c)
add_executable(server srv/prompt_utils.c srv/array.c srv/shell.c srv/process.c srv/server.c srv/builtins.c)
target_compile_options(client INTERFACE ${PROJECT_WARNINGS})
-target_compile_options(server INTERFACE ${PROJECT_WARNINGS})
+target_compile_options(server INTERFACE ${PROJECT_WARNINGS}) \ No newline at end of file
diff --git a/03_exercise/cli/client b/03_exercise/cli/client
index 95db5c3..4450079 100755
--- a/03_exercise/cli/client
+++ b/03_exercise/cli/client
Binary files differ
diff --git a/03_exercise/echo_server/Makefile b/03_exercise/echo_server/Makefile
deleted file mode 100644
index df023d1..0000000
--- a/03_exercise/echo_server/Makefile
+++ /dev/null
@@ -1,22 +0,0 @@
-#!/usr/bin/make
-.SUFFIXES:
-.PHONY: all run clean
-.SILENT: run
-
-TAR = client server
-CFLAGS = -c -Os -Wall -Werror
-
-%.o: %.c
- $(CC) $(CFLAGS) $^ -o $@
-
-%: %.o
- $(CC) -o $@ $^
-
-all: $(TAR)
-
-run: all
- ./server&
- ./client
-
-clean:
- $(RM) $(RMFILES) $(TAR) *.o
diff --git a/03_exercise/echo_server/client.c b/03_exercise/echo_server/client.c
deleted file mode 100644
index a664221..0000000
--- a/03_exercise/echo_server/client.c
+++ /dev/null
@@ -1,47 +0,0 @@
-
-#include <stdio.h>
-#include <stdlib.h>
-
-#include <unistd.h>
-#include <sys/socket.h>
-#include <netinet/in.h>
-#include <arpa/inet.h>
-
-static inline void die(const char* msg)
-{
- perror(msg);
- exit(-1);
-}
-
-int main()
-{
- struct sockaddr_in addr = {
- .sin_family = AF_INET,
- .sin_port = htons(8000),
- .sin_addr.s_addr = inet_addr("127.0.0.1")
- };
- char buf[256];
- int cfd;
-
- if ((cfd = socket(AF_INET, SOCK_STREAM, 0)) < 0)
- die("Couldn't open the socket");
-
- if (connect(cfd, (struct sockaddr*) &addr, sizeof(addr)) < 0)
- die("Couldn't connect to socket");
-
- for (int i = 0; i < 5; ++i)
- {
- if (write(cfd, "Ping", 4) < 0)
- die("Couldn't send message");
-
- printf("[send] Ping\n");
-
- if (read(cfd, buf, sizeof(buf)) < 0)
- die("Couldn't receive message");
-
- printf("[recv] %s\n", buf);
- }
-
- close(cfd);
- return 0;
-}
diff --git a/03_exercise/echo_server/server.c b/03_exercise/echo_server/server.c
deleted file mode 100644
index 5f647c1..0000000
--- a/03_exercise/echo_server/server.c
+++ /dev/null
@@ -1,53 +0,0 @@
-
-#include <stdio.h>
-#include <stdlib.h>
-
-#include <unistd.h>
-#include <sys/socket.h>
-#include <netinet/in.h>
-#include <arpa/inet.h>
-
-static inline void die(const char *msg) {
- perror(msg);
- exit(-1);
-}
-
-int main() {
- struct sockaddr_in srv_addr, cli_addr;
- int sockopt = 1;
- socklen_t sad_sz = sizeof(struct sockaddr_in);
- int sfd, cfd;
- ssize_t bytes;
- char buf[256];
-
- srv_addr.sin_family = AF_INET;
- srv_addr.sin_port = htons(8000);
- srv_addr.sin_addr.s_addr = INADDR_ANY;
-
- if ((sfd = socket(AF_INET, SOCK_STREAM, 0)) < 0)
- die("Couldn't open the socket");
-
- setsockopt(sfd, SOL_SOCKET, SO_REUSEADDR, (char *) &sockopt, sizeof(sockopt));
-
- if (bind(sfd, (struct sockaddr *) &srv_addr, sad_sz) < 0)
- die("Couldn't bind socket");
-
- if (listen(sfd, 1) < 0)
- die("Couldn't listen to the socket");
-
- cfd = accept(sfd, (struct sockaddr *) &cli_addr, &sad_sz);
- if (cfd < 0)
- die("Couldn't accept incoming connection");
-
- while ((bytes = read(cfd, buf, sizeof(buf))) != 0) {
- if (bytes < 0)
- die("Couldn't receive message");
-
- if (write(cfd, buf, bytes) < 0)
- die("Couldn't send message");
- }
-
- close(cfd);
- close(sfd);
- return 0;
-}
diff --git a/03_exercise/srv/shell.c b/03_exercise/srv/shell.c
index c7155c6..74c492b 100644
--- a/03_exercise/srv/shell.c
+++ b/03_exercise/srv/shell.c
@@ -100,6 +100,13 @@ void send_file(int client_fd, char *path) {
return;
}
+ int flag = 1;
+ // force flush
+ flag = 1;
+ setsockopt(client_fd, IPPROTO_TCP, TCP_NODELAY, (char *) &flag, sizeof(int));
+ flag = 0;
+ setsockopt(client_fd, IPPROTO_TCP, TCP_NODELAY, (char *) &flag, sizeof(int));
+
int length = snprintf(NULL, 0, "%ld", sz);
sprintf(buffer, "<<!%ld!", sz);
sprintf(&(buffer[3 + length + 1]), "%s!\n", path);
@@ -109,10 +116,10 @@ void send_file(int client_fd, char *path) {
return;
}
- int flag = 1;
- // force flush
+ flag = 1;
setsockopt(client_fd, IPPROTO_TCP, TCP_NODELAY, (char *) &flag, sizeof(int));
flag = 0;
+ setsockopt(client_fd, IPPROTO_TCP, TCP_NODELAY, (char *) &flag, sizeof(int));
usleep(150);