Index: benchmark/io/http/http_ring.cpp
===================================================================
--- benchmark/io/http/http_ring.cpp	(revision 9715567d8a7b3060d34ab49ff1d8da8ac6d4bd44)
+++ benchmark/io/http/http_ring.cpp	(revision eeb48669238c90c05023cf8316f28e1069986876)
@@ -8,4 +8,7 @@
 #include <unistd.h>
 #include <liburing.h>
+
+// #define NOBATCHING
+// #define USE_ASYNC
 
 // Options passed to each threads
@@ -167,8 +170,5 @@
 		, buffer( new char[buffer_size])
 		, iterator(nullptr)
-	{
-		::stats.conns.max++;
-		::stats.conns.current++;
-	}
+	{}
 
 	~connection() {
@@ -192,7 +192,11 @@
 	static void submit(struct io_uring * ring, struct io_uring_sqe * sqe, connection * conn) {
 		(void)ring;
-		// io_uring_sqe_set_flags(sqe, IOSQE_ASYNC);
+		#ifdef USE_ASYNC
+			io_uring_sqe_set_flags(sqe, IOSQE_ASYNC);
+		#endif
 		io_uring_sqe_set_data(sqe, conn);
-		// io_uring_submit(ring);
+		#ifdef NOBATCHING
+			io_uring_submit(ring);
+		#endif
 	}
 
@@ -206,5 +210,5 @@
 		state = REQUESTING;
 		struct io_uring_sqe * sqe = get_sqe(ring);
-		io_uring_prep_read(sqe, fd, (void*)buffer, buffer_size, 0);
+		io_uring_prep_recv(sqe, fd, (void*)buffer, buffer_size, 0);
 		submit(ring, sqe);
 	}
@@ -226,5 +230,5 @@
 		state = ANSWERING;
 		struct io_uring_sqe * sqe = get_sqe(ring);
-		io_uring_prep_write(sqe, fd, iterator, to_send, 0);
+		io_uring_prep_send(sqe, fd, iterator, to_send, 0);
 		submit(ring, sqe);
 	}
@@ -247,4 +251,8 @@
 		// Count the connections
 		::stats.completions.conns++;
+		::stats.conns.current++;
+		if(::stats.conns.current > ::stats.conns.max) {
+			::stats.conns.max = ::stats.conns.current;
+		}
 
 		// Read on the data
@@ -373,6 +381,6 @@
 		if( res == to_send ) {
 			// Yes, more stats
-			stats.answers++;
-			if(stats.answers == 2) ::stats.conns.used++;
+			this->stats.answers++;
+			if(this->stats.answers == 1) ::stats.conns.used++;
 			// Then read a new request
 			request(ring);
@@ -459,7 +467,10 @@
 			req->handle( ring, cqe->res, opt );
 
+			// Every now and then, print some stats
 			reset--;
 			if(reset == 0) {
 				std::cout << "Submit average: " << sqes << "/" << call << "(" << (((double)sqes) / call) << ")" << std::endl;
+				// Reset to some random number of completions
+				// use the ring_fd in the number of threads don't all print at once
 				reset = 100000 + (100000 * (ring->ring_fd % 5));
 			}
@@ -755,5 +766,8 @@
 	std::cout << "Max FD: " << max_fd << std::endl;
 	std::cout << "Successful connections: " << global_stats.conns.used << std::endl;
+	std::cout << "Max concurrent connections: " << global_stats.conns.max << std::endl;
 	std::cout << "Accepts on non-zeros: " << global_stats.recycle_errors << std::endl;
 	std::cout << "Leaked conn objects: " << global_stats.conns.current << std::endl;
 }
+
+// compile-command: "g++ http_ring.cpp -std=c++2a -pthread -luring -O3" //
