1*a629ded1SLOLi /*
2*a629ded1SLOLi  * This file and its contents are supplied under the terms of the
3*a629ded1SLOLi  * Common Development and Distribution License ("CDDL"), version 1.0.
4*a629ded1SLOLi  * You may only use this file in accordance with the terms of version
5*a629ded1SLOLi  * 1.0 of the CDDL.
6*a629ded1SLOLi  *
7*a629ded1SLOLi  * A full copy of the text of the CDDL should have accompanied this
8*a629ded1SLOLi  * source.  A copy of the CDDL is also available via the Internet at
9*a629ded1SLOLi  * http://www.illumos.org/license/CDDL.
10*a629ded1SLOLi  */
11*a629ded1SLOLi 
12*a629ded1SLOLi /*
13*a629ded1SLOLi  * Copyright 2017, loli10K <ezomori.nozomu@gmail.com>. All rights reserved.
14*a629ded1SLOLi  * Copyright 2019 Joyent, Inc.
15*a629ded1SLOLi  */
16*a629ded1SLOLi 
17*a629ded1SLOLi #include <fcntl.h>
18*a629ded1SLOLi #include <sys/un.h>
19*a629ded1SLOLi #include <sys/socket.h>
20*a629ded1SLOLi #include <sys/stat.h>
21*a629ded1SLOLi #include <sys/types.h>
22*a629ded1SLOLi #include <unistd.h>
23*a629ded1SLOLi #include <errno.h>
24*a629ded1SLOLi #include <stdio.h>
25*a629ded1SLOLi #include <stdlib.h>
26*a629ded1SLOLi #include <string.h>
27*a629ded1SLOLi 
28*a629ded1SLOLi /* ARGSUSED */
29*a629ded1SLOLi int
main(int argc,char * argv[])30*a629ded1SLOLi main(int argc, char *argv[])
31*a629ded1SLOLi {
32*a629ded1SLOLi 	struct sockaddr_un sock;
33*a629ded1SLOLi 	int fd;
34*a629ded1SLOLi 	char *path;
35*a629ded1SLOLi 	size_t size;
36*a629ded1SLOLi 	if (argc != 2) {
37*a629ded1SLOLi 		fprintf(stderr, "usage: %s /path/to/socket\n", argv[0]);
38*a629ded1SLOLi 		exit(1);
39*a629ded1SLOLi 	}
40*a629ded1SLOLi 	path = argv[1];
41*a629ded1SLOLi 	size =  sizeof (sock.sun_path);
42*a629ded1SLOLi 	(void) strncpy(sock.sun_path, (char *)path, size - 1);
43*a629ded1SLOLi 	sock.sun_path[size - 1] = '\0';
44*a629ded1SLOLi 
45*a629ded1SLOLi 	sock.sun_family = AF_UNIX;
46*a629ded1SLOLi 	if ((fd = socket(AF_UNIX, SOCK_DGRAM, 0)) == -1) {
47*a629ded1SLOLi 		perror("socket");
48*a629ded1SLOLi 		return (1);
49*a629ded1SLOLi 	}
50*a629ded1SLOLi 	if (bind(fd, (struct sockaddr *)&sock, sizeof (struct sockaddr_un))) {
51*a629ded1SLOLi 		perror("bind");
52*a629ded1SLOLi 		return (1);
53*a629ded1SLOLi 	}
54*a629ded1SLOLi 	if (close(fd)) {
55*a629ded1SLOLi 		perror("close");
56*a629ded1SLOLi 		return (1);
57*a629ded1SLOLi 	}
58*a629ded1SLOLi 	return (0);
59*a629ded1SLOLi }
60