Index: benchmark/io/http/main.cfa
===================================================================
--- benchmark/io/http/main.cfa	(revision 77fde9d52d93437c80f050335facd87a71c4b34e)
+++ benchmark/io/http/main.cfa	(revision 7dafb7b135da66032fbd090d190c88d338699333)
@@ -59,8 +59,6 @@
 	//===================
 	// Open Files
-	if (FileExperiment == options.experiment.type) {
-		printf("Filling cache from %s\n", path);
-		fill_cache( path );
-	}
+	printf("Filling cache from %s\n", path);
+	fill_cache( path );
 
 	//===================
@@ -162,4 +160,5 @@
 				for(i; options.clopts.nworkers) {
 					printf("Cancelling %p\n", (void*)workers[i].cancel.target);
+					workers[i].done = true;
 					cancel(workers[i].cancel);
 				}
Index: benchmark/io/http/options.cfa
===================================================================
--- benchmark/io/http/options.cfa	(revision 77fde9d52d93437c80f050335facd87a71c4b34e)
+++ benchmark/io/http/options.cfa	(revision 7dafb7b135da66032fbd090d190c88d338699333)
@@ -15,7 +15,5 @@
 
 Options options @= {
-	{ // experiment
-		FileExperiment, // type
-	},
+	false, // log
 
 	{ // file_cache
@@ -43,18 +41,4 @@
 };
 
-static bool parse(const char * arg, ExprimentType & value) {
-	if(strcmp(arg, "file") == 0) {
-		value = FileExperiment;
-		return true;
-	}
-
-	if(strcmp(arg, "plaintext") == 0) {
-		value = HelloWorldExperiment;
-		return true;
-	}
-
-	return false;
-}
-
 const char * parse_options( int argc, char * argv[] ) {
 	bool subthrd = false;
@@ -68,5 +52,5 @@
 		{'p', "port",           "Port the server will listen on", options.socket.port},
 		{'c', "cpus",           "Number of processors to use", options.clopts.nprocs},
-		{'T', "experiment",     "Experiment type to run: file, plaintext", options.experiment.type},
+		{'L', "log",            "Enable logs", options.log, parse_settrue},
 		{'t', "threads",        "Number of worker threads to use", options.clopts.nworkers},
 		{'b', "accept-backlog", "Maximum number of pending accepts", options.socket.backlog},
Index: benchmark/io/http/options.hfa
===================================================================
--- benchmark/io/http/options.hfa	(revision 77fde9d52d93437c80f050335facd87a71c4b34e)
+++ benchmark/io/http/options.hfa	(revision 7dafb7b135da66032fbd090d190c88d338699333)
@@ -7,13 +7,6 @@
 struct cluster;
 
-enum ExprimentType {
-	FileExperiment,
-	HelloWorldExperiment
-};
-
 struct Options {
-	struct {
-		ExprimentType type;
-	} experiment;
+	bool log;
 
 	struct {
Index: benchmark/io/http/protocol.cfa
===================================================================
--- benchmark/io/http/protocol.cfa	(revision 77fde9d52d93437c80f050335facd87a71c4b34e)
+++ benchmark/io/http/protocol.cfa	(revision 7dafb7b135da66032fbd090d190c88d338699333)
@@ -103,5 +103,5 @@
 	}
 
-	printf("%.*s\n", rlen, buffer);
+	if( options.log ) printf("%.*s\n", rlen, buffer);
 
 	it = buffer;
Index: benchmark/io/http/worker.cfa
===================================================================
--- benchmark/io/http/worker.cfa	(revision 77fde9d52d93437c80f050335facd87a71c4b34e)
+++ benchmark/io/http/worker.cfa	(revision 7dafb7b135da66032fbd090d190c88d338699333)
@@ -19,4 +19,9 @@
 	this.pipe[0] = -1;
 	this.pipe[1] = -1;
+	this.done = false;
+}
+
+extern "C" {
+extern int accept4(int sockfd, struct sockaddr *addr, socklen_t *addrlen, int flags);
 }
 
@@ -28,13 +33,14 @@
 	CONNECTION:
 	for() {
-		printf("=== Accepting connection ===\n");
+		if( options.log ) printf("=== Accepting connection ===\n");
 		int fd = cfa_accept4( this.[sockfd, addr, addrlen, flags], 0, -1`s, &this.cancel, 0p );
+		// int fd = accept4( this.[sockfd, addr, addrlen, flags] );
 		if(fd < 0) {
 			if( errno == ECONNABORTED ) break;
-			if( errno == EINVAL ) break;
+			if( errno == EINVAL && this.done ) break;
 			abort( "accept error: (%d) %s\n", (int)errno, strerror(errno) );
 		}
 
-		printf("=== New connection %d, waiting for requests ===\n", fd);
+		if( options.log ) printf("=== New connection %d, waiting for requests ===\n", fd);
 		REQUEST:
 		for() {
@@ -47,10 +53,10 @@
 			size_t len = options.socket.buflen;
 			char buffer[len];
-			printf("=== Reading request ===\n");
+			if( options.log ) printf("=== Reading request ===\n");
 			[code, closed, file, name_size] = http_read(fd, buffer, len, &this.cancel);
 
 			// if we are done, break out of the loop
 			if( closed ) {
-				printf("=== Connection closed ===\n");
+				if( options.log ) printf("=== Connection closed ===\n");
 				continue CONNECTION;
 			}
@@ -58,5 +64,5 @@
 			// If this wasn't a request retrun 400
 			if( code != OK200 ) {
-				printf("=== Invalid Request : %d ===\n", code_val(code));
+				if( options.log ) printf("=== Invalid Request : %d ===\n", code_val(code));
 				answer_error(fd, code);
 				continue REQUEST;
@@ -64,5 +70,5 @@
 
 			if(0 == strncmp(file, "plaintext", min(name_size, sizeof("plaintext") ))) {
-				printf("=== Request for /plaintext ===\n");
+				if( options.log ) printf("=== Request for /plaintext ===\n");
 
 				char text[] = "Hello, World!\n";
@@ -72,5 +78,5 @@
 			}
 			else {
-				printf("=== Request for file %.*s ===\n", (int)name_size, file);
+				if( options.log ) printf("=== Request for file %.*s ===\n", (int)name_size, file);
 
 				// Get the fd from the file cache
@@ -81,5 +87,5 @@
 				// If we can't find the file, return 404
 				if( ans_fd < 0 ) {
-					printf("=== File Not Found ===\n");
+					if( options.log ) printf("=== File Not Found ===\n");
 					answer_error(fd, E404);
 					continue REQUEST;
@@ -93,5 +99,5 @@
 			}
 
-			printf("=== Answer sent ===\n");
+			if( options.log ) printf("=== Answer sent ===\n");
 		}
 	}
Index: benchmark/io/http/worker.hfa
===================================================================
--- benchmark/io/http/worker.hfa	(revision 77fde9d52d93437c80f050335facd87a71c4b34e)
+++ benchmark/io/http/worker.hfa	(revision 7dafb7b135da66032fbd090d190c88d338699333)
@@ -18,4 +18,5 @@
 	int flags;
 	io_cancellation cancel;
+	volatile bool done;
 };
 void ?{}( Worker & this);
