diff --git a/apps/EchoServer.cpp b/apps/EchoServer.cpp
index 4d21dac67043eee4caed1480cd48c65d17b5e931..8c1e8e722665bd676e455bd3b17dc64b2d97496c 100644
--- a/apps/EchoServer.cpp
+++ b/apps/EchoServer.cpp
@@ -2,8 +2,7 @@
 // Copyright © 2020-2021 Florian Fischer
 #include <sys/types.h>
 
-#include <cassert>
-#include <climits>
+#include <cerrno>
 #include <cstdlib>
 #include <cstring>
 #include <iostream>
@@ -44,9 +43,10 @@ auto main(int argc, char* argv[]) -> int {
 			if (unlikely(bytes_recv <= 0)) {
 				// socket was shutdown
 				if (bytes_recv < 0) {
-					DIE_MSG_ERRNO("server read failed");
+					LOGE("server read failed:" << strerror(errno));
 				}
 
+			finish:
 				emper::io::closeAndForget(socket);
 				return;
 			}
@@ -55,8 +55,11 @@ auto main(int argc, char* argv[]) -> int {
 				exit(EXIT_SUCCESS);
 			}
 
-			ATTR_UNUSED ssize_t bytes_send = emper::io::sendAndWait(socket, buf, bytes_recv, 0);
-			assert(bytes_recv == bytes_send);
+			ssize_t bytes_send = emper::io::sendAndWait(socket, buf, bytes_recv, MSG_NOSIGNAL, true);
+			if (unlikely(bytes_recv != bytes_send)) {
+				LOGE("server send failed: " << strerror(errno));
+				goto finish;
+			}
 		}
 	});