diff --git a/tools/apps/src/bin/quiche-client.rs b/tools/apps/src/bin/quiche-client.rs
index 9d2c953..03c54ee 100644
--- a/tools/apps/src/bin/quiche-client.rs
+++ b/tools/apps/src/bin/quiche-client.rs
@@ -37,6 +37,9 @@
 
 const MAX_DATAGRAM_SIZE: usize = 1350;
 
+const HANDSHAKE_FAIL_STATUS: i32 = -1;
+const HTTP_FAIL_STATUS: i32 = -2;
+
 const USAGE: &str = "Usage:
   quiche-client [options] URL...
   quiche-client -h | --help
@@ -284,8 +287,19 @@
         if conn.is_closed() {
             info!("connection closed, {:?}", conn.stats());
 
+            if !conn.is_established() {
+                error!(
+                    "connection timed out after {:?}",
+                    app_data_start.elapsed(),
+                );
+
+                std::process::exit(HANDSHAKE_FAIL_STATUS);
+            }
+
             if let Some(h_conn) = http_conn {
-                h_conn.report_incomplete(&app_data_start);
+                if h_conn.report_incomplete(&app_data_start) {
+                    std::process::exit(HTTP_FAIL_STATUS);
+                }
             }
 
             if let Some(si_conn) = siduck_conn {
@@ -395,8 +409,23 @@
         if conn.is_closed() {
             info!("connection closed, {:?}", conn.stats());
 
+            if !conn.is_established() {
+                error!(
+                    "connection timed out after {:?}",
+                    app_data_start.elapsed(),
+                );
+
+                std::process::exit(HANDSHAKE_FAIL_STATUS);
+            }
+
             if let Some(h_conn) = http_conn {
-                h_conn.report_incomplete(&app_data_start);
+                if h_conn.report_incomplete(&app_data_start) {
+                    std::process::exit(HTTP_FAIL_STATUS);
+                }
+            }
+
+            if let Some(si_conn) = siduck_conn {
+                si_conn.report_incomplete(&app_data_start);
             }
 
             break;
diff --git a/tools/apps/src/lib.rs b/tools/apps/src/lib.rs
index 6c1b706..3f72fc9 100644
--- a/tools/apps/src/lib.rs
+++ b/tools/apps/src/lib.rs
@@ -347,7 +347,7 @@
         req_start: &std::time::Instant,
     );
 
-    fn report_incomplete(&self, start: &std::time::Instant);
+    fn report_incomplete(&self, start: &std::time::Instant) -> bool;
 
     fn handle_requests(
         &mut self, conn: &mut std::pin::Pin<Box<quiche::Connection>>,
@@ -501,7 +501,7 @@
         }
     }
 
-    pub fn report_incomplete(&self, start: &std::time::Instant) {
+    pub fn report_incomplete(&self, start: &std::time::Instant) -> bool {
         if self.quacks_acked != self.quacks_to_make {
             error!(
                 "connection timed out after {:?} and only received {}/{} quack-acks",
@@ -509,7 +509,11 @@
                 self.quacks_acked,
                 self.quacks_to_make
             );
+
+            return true;
         }
+
+        false
     }
 }
 
@@ -679,7 +683,7 @@
         }
     }
 
-    fn report_incomplete(&self, start: &std::time::Instant) {
+    fn report_incomplete(&self, start: &std::time::Instant) -> bool {
         if self.reqs_complete != self.reqs.len() {
             error!(
                 "connection timed out after {:?} and only completed {}/{} requests",
@@ -687,7 +691,11 @@
                 self.reqs_complete,
                 self.reqs.len()
             );
+
+            return true;
         }
+
+        false
     }
 
     fn handle_requests(
@@ -1260,7 +1268,7 @@
         }
     }
 
-    fn report_incomplete(&self, start: &std::time::Instant) {
+    fn report_incomplete(&self, start: &std::time::Instant) -> bool {
         if self.reqs_complete != self.reqs.len() {
             error!(
                 "connection timed out after {:?} and only completed {}/{} requests",
@@ -1272,7 +1280,11 @@
             if self.dump_json {
                 dump_json(&self.reqs);
             }
+
+            return true;
         }
+
+        false
     }
 
     fn handle_requests(
