#include <stdio.h>
#include <unistd.h>
#include <errno.h>
#include <sys/types.h>
#include <sys/socket.h>
#include <sys/un.h>

#define UNIX_DOMAIN_SOCKET_PATH "/tmp/unix-domain-socket"

int main(int argc, char **argv)
{
	int sock;
	struct sockaddr_un sa = {0};
	char buf[128] = {0};

	if (argc >= 2) {
		// 送信データの生成
		memcpy(buf, argv[1], strlen(argv[1]));
	}
	else {
		printf("usage: unix_domain_socket_cli <message>\n");
		return 1;
	}

	// ソケット作成
	sock = socket(AF_UNIX, SOCK_STREAM, 0);
	if (sock == -1) {
		perror("socket");
		return 1;
	}

	// struct sockaddr_un 作成
	sa.sun_family = AF_UNIX;
	strcpy(sa.sun_path, UNIX_DOMAIN_SOCKET_PATH);

	// connect
	if (connect(sock, (struct sockaddr*) &sa, sizeof(struct sockaddr_un)) == -1) {
		perror("connect");
		goto CLOSE_SOCKET;
	}

	// write (データ送信)
	if (write(sock, buf, strlen(buf)) == -1) {
		perror("write");
		goto CLOSE_SOCKET;
	}

	// close (クローズ)
	if (close(sock) == -1) {
		perror("close");
	}
	return 0;

CLOSE_SOCKET:
	close(sock);

	return 1;
}
