diff --git a/server.c b/server.c
new file mode 100644
index 0000000..bd49b9c
--- /dev/null
+++ b/server.c
@@ -0,0 +1,108 @@
+#include <stdio.h>
+#include <stdlib.h>
+#include <unistd.h>
+#include <limits.h>
+#include <string.h>
+#include <getopt.h>
+#include <errno.h>
+#include <fcntl.h>
+#include <sys/poll.h>
+#include <sys/stat.h>
+#include <sys/types.h>
+#include <sys/wait.h>
+#include <sys/time.h>
+#include <sys/mman.h>
+#include <signal.h>
+#include <netinet/in.h>
+#include <arpa/inet.h>
+#include <netdb.h>
+
+#include "fio.h"
+
+static int net_port = 8765;
+
+static int accept_loop(int listen_sk)
+{
+	struct sockaddr addr;
+	unsigned int len = sizeof(addr);
+	int sk;
+
+again:
+	sk = accept(listen_sk, &addr, &len);
+	printf("got a hit\n");
+	if (sk < 0) {
+		log_err("fio: accept failed\n");
+		return -1;
+	}
+
+	/* read forever */
+	for (;;) {
+		char buf[131072];
+		int ret;
+
+		ret = recv(sk, buf, 4096, 0);
+		if (ret > 0) {
+			parse_jobs_ini(buf, 1, 0);
+			exec_run();
+			reset_fio_state();
+			break;
+		} else if (!ret)
+			break;
+		if (errno == EAGAIN || errno == EINTR)
+			continue;
+		break;
+	}
+
+	close(sk);
+	printf("closed\n");
+	goto again;
+}
+
+int fio_server(void)
+{
+	struct sockaddr_in saddr_in;
+	struct sockaddr addr;
+	unsigned int len;
+	int sk, opt;
+
+	sk = socket(AF_INET, SOCK_STREAM, 0);
+	if (sk < 0) {
+		log_err("fio: socket\n");
+		return -1;
+	}
+
+	opt = 1;
+	if (setsockopt(sk, SOL_SOCKET, SO_REUSEADDR, &opt, sizeof(opt)) < 0) {
+		log_err("fio: setsockopt\n");
+		return -1;
+	}
+#ifdef SO_REUSEPORT
+	if (setsockopt(fd, SOL_SOCKET, SO_REUSEPORT, &opt, sizeof(opt)) < 0) {
+		td_verror(td, errno, "setsockopt");
+		return 1;
+	}
+#endif
+
+	saddr_in.sin_family = AF_INET;
+	saddr_in.sin_addr.s_addr = htonl(INADDR_ANY);
+	saddr_in.sin_port = htons(net_port);
+
+	if (bind(sk, (struct sockaddr *) &saddr_in, sizeof(saddr_in)) < 0) {
+		perror("bind");
+		log_err("fio: bind\n");
+		return -1;
+	}
+
+	if (listen(sk, 1) < 0) {
+		log_err("fio: listen\n");
+		return -1;
+	}
+
+	len = sizeof(addr);
+	if (getsockname(sk, &addr, &len) < 0) {
+		log_err("fio: getsockname");
+		return -1;
+	}
+
+	return accept_loop(sk);
+}
