Index: benchmark/io/http/main.cfa
===================================================================
--- benchmark/io/http/main.cfa	(revision ee59ede130d0876eee5d49e48e5ba64200a46b9c)
+++ benchmark/io/http/main.cfa	(revision 153dc387ec75dfb0f116f4c16cf5a2a15acbe38d)
@@ -11,4 +11,5 @@
 
 #include <kernel.hfa>
+#include <iofwd.hfa>
 #include <stats.hfa>
 #include <time.hfa>
@@ -48,4 +49,27 @@
 extern void init_protocol(void);
 extern void deinit_protocol(void);
+
+//=============================================================================================
+// Stats Printer
+//============================================================================================='
+
+thread StatsPrinter {};
+
+void ?{}( StatsPrinter & this ) {
+	((thread&)this){ "Stats Printer Thread" };
+}
+
+void main(StatsPrinter & this) {
+	LOOP: for() {
+		waitfor( ^?{} : this) {
+			break LOOP;
+		}
+		or else {}
+
+		sleep(10`s);
+
+		print_stats_now( *options.clopts.instance, CFA_STATS_READY_Q | CFA_STATS_IO );
+	}
+}
 
 //=============================================================================================
@@ -128,4 +152,5 @@
 		{
 			ServerProc procs[options.clopts.nprocs];
+			StatsPrinter printer;
 
 			init_protocol();
@@ -152,5 +177,6 @@
 					char buffer[128];
 					while(!feof(stdin)) {
-						fgets(buffer, 128, stdin);
+						int ret = cfa_read(0, buffer, 128, 0, -1`s, 0p, 0p);
+						if(ret < 0) abort( "main read error: (%d) %s\n", (int)errno, strerror(errno) );
 					}
 
@@ -159,5 +185,4 @@
 
 				for(i; options.clopts.nworkers) {
-					printf("Cancelling %p\n", (void*)workers[i].cancel.target);
 					workers[i].done = true;
 					cancel(workers[i].cancel);
