From 3c13b7ad6bc7a1a3b84d27c8c9fd4c8da1d2112f Mon Sep 17 00:00:00 2001 From: vm Date: Mon, 8 Jun 2020 17:43:47 +0200 Subject: get works again? --- 02_exercise/CMakeLists.txt | 2 -- 03_exercise/.srv_pid | 2 +- 03_exercise/CMakeLists.txt | 4 +-- 03_exercise/cli/client | Bin 31992 -> 35192 bytes 03_exercise/echo_server/Makefile | 22 ---------------- 03_exercise/echo_server/client.c | 47 ---------------------------------- 03_exercise/echo_server/server.c | 53 --------------------------------------- 03_exercise/srv/shell.c | 11 ++++++-- 8 files changed, 11 insertions(+), 130 deletions(-) delete mode 100644 03_exercise/echo_server/Makefile delete mode 100644 03_exercise/echo_server/client.c delete mode 100644 03_exercise/echo_server/server.c 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 Binary files a/03_exercise/cli/client and b/03_exercise/cli/client 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 -#include - -#include -#include -#include -#include - -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 -#include - -#include -#include -#include -#include - -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, "<