summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorNiklas Halle <niklas@niklashalle.net>2020-06-08 14:56:34 +0200
committerNiklas Halle <niklas@niklashalle.net>2020-06-08 14:56:34 +0200
commit5cc93f9b21f26b204dba4b496ccc0f732b268c3f (patch)
tree7598ae57084016c119a2ca80ab1f6c4c2499187d
parentd849d98cc5e630c2df9f07b306e724adc8580c81 (diff)
downloadbetriebssysteme-5cc93f9b21f26b204dba4b496ccc0f732b268c3f.tar.gz
betriebssysteme-5cc93f9b21f26b204dba4b496ccc0f732b268c3f.zip
force flush after header write
-rw-r--r--03_exercise/srv/shell.c20
1 files changed, 14 insertions, 6 deletions
diff --git a/03_exercise/srv/shell.c b/03_exercise/srv/shell.c
index 0419f35..95c9982 100644
--- a/03_exercise/srv/shell.c
+++ b/03_exercise/srv/shell.c
@@ -6,6 +6,9 @@
#include <stdbool.h>
#include <wait.h>
#include <errno.h>
+#include <ares_build.h>
+#include <netinet/in.h>
+#include <netinet/tcp.h>
#include "array.h"
#include "process.h"
@@ -123,7 +126,12 @@ void send_file(int client_fd, char *path) {
return;
}
- usleep(250);
+ int flag = 1;
+ // force flush
+ setsockopt(client_fd, IPPROTO_TCP, TCP_NODELAY, (char *) &flag, sizeof(int));
+ flag = 0;
+
+ usleep(150);
memset(buffer, 0, BUF_SIZE);
@@ -156,16 +164,16 @@ void signal_handler(int signal) {
bool check_put(char *buffer, int sock) {
// "<<!bytecount!name"
- char cmd[4];
- char rest[BUF_SIZE - 3];
- size_t file_size;
+ char cmd[4];
memcpy(cmd, buffer, 3);
cmd[3] = 0;
if (strcmp(cmd, "<<!") == 0) {
- int offset = 3;
- int i = offset;
+ char rest[BUF_SIZE - 3];
+ size_t file_size;
+ int offset = 3;
+ int i = offset;
for (; i < BUF_SIZE; ++i) {
if (buffer[i] == '!')
break;