summary refs log tree commit diff
path: root/rvnitctl.c
diff options
context:
space:
mode:
Diffstat (limited to 'rvnitctl.c')
-rw-r--r--rvnitctl.c46
1 files changed, 46 insertions, 0 deletions
diff --git a/rvnitctl.c b/rvnitctl.c
new file mode 100644
index 0000000..1f3977c
--- /dev/null
+++ b/rvnitctl.c
@@ -0,0 +1,46 @@
+#include <sys/socket.h>
+#include <sys/un.h>
+
+#include <stdio.h>
+#include <stdlib.h>
+#include <unistd.h>
+
+int
+main(int argc, char *argv[])
+{
+	if (argc < 2) {
+		dprintf(2, "usage: rvnitctl COMMAND [SERVICE]\n");
+		exit(2);
+	}
+
+	const char *path = "/tmp/rvnit.sock";
+
+	struct sockaddr_un addr = { 0 };
+	addr.sun_family = AF_UNIX;
+	strncpy(addr.sun_path, path, sizeof addr.sun_path - 1);
+	int connfd = socket(AF_UNIX, SOCK_STREAM | SOCK_CLOEXEC, 0);
+	if (connfd < 0) {
+		perror("socket");
+		exit(111);
+	}
+
+	if (connect(connfd, (struct sockaddr *)&addr, sizeof addr) < 0) {
+		perror("connect");
+		exit(111);
+	}
+
+	dprintf(connfd, "%c%s", *argv[1], argv[2] ? argv[2] : "");
+
+	ssize_t rd;
+	do {
+		char buf[4096];
+		rd = read(connfd, buf, sizeof buf);
+		if (rd < 0) {
+			perror("read");
+			exit(111);
+		}
+		write(1, buf, rd);
+	} while (rd > 0);
+
+	return 0;
+}