12feb3e2e653be1ef1292b92036f919bb990586c9Frank Osterfeld#include <stdlib.h>
22feb3e2e653be1ef1292b92036f919bb990586c9Frank Osterfeld#include <string.h>
32feb3e2e653be1ef1292b92036f919bb990586c9Frank Osterfeld#include <stdio.h>
42feb3e2e653be1ef1292b92036f919bb990586c9Frank Osterfeld#include <sys/socket.h>
52feb3e2e653be1ef1292b92036f919bb990586c9Frank Osterfeld#include <sys/un.h>
62feb3e2e653be1ef1292b92036f919bb990586c9Frank Osterfeld#include <errno.h>
72feb3e2e653be1ef1292b92036f919bb990586c9Frank Osterfeld
82feb3e2e653be1ef1292b92036f919bb990586c9Frank Osterfeldint main() {
92feb3e2e653be1ef1292b92036f919bb990586c9Frank Osterfeld  int listen_fd;
102feb3e2e653be1ef1292b92036f919bb990586c9Frank Osterfeld  struct sockaddr_un addr;
112feb3e2e653be1ef1292b92036f919bb990586c9Frank Osterfeld
122feb3e2e653be1ef1292b92036f919bb990586c9Frank Osterfeld  listen_fd = socket (PF_UNIX, SOCK_STREAM, 0);
132feb3e2e653be1ef1292b92036f919bb990586c9Frank Osterfeld
142feb3e2e653be1ef1292b92036f919bb990586c9Frank Osterfeld  if (listen_fd < 0)
152feb3e2e653be1ef1292b92036f919bb990586c9Frank Osterfeld    {
162feb3e2e653be1ef1292b92036f919bb990586c9Frank Osterfeld      fprintf (stderr, "socket() failed: %s\n", strerror (errno));
172feb3e2e653be1ef1292b92036f919bb990586c9Frank Osterfeld      exit (1);
182feb3e2e653be1ef1292b92036f919bb990586c9Frank Osterfeld    }
192feb3e2e653be1ef1292b92036f919bb990586c9Frank Osterfeld
202feb3e2e653be1ef1292b92036f919bb990586c9Frank Osterfeld  memset (&addr, '\0', sizeof (addr));
212feb3e2e653be1ef1292b92036f919bb990586c9Frank Osterfeld  addr.sun_family = AF_UNIX;
222feb3e2e653be1ef1292b92036f919bb990586c9Frank Osterfeld  strcpy (addr.sun_path, "X/tmp/dbus-fake-socket-path-used-in-configure-test");
232feb3e2e653be1ef1292b92036f919bb990586c9Frank Osterfeld  addr.sun_path[0] = '\0'; /* this is what makes it abstract */
242feb3e2e653be1ef1292b92036f919bb990586c9Frank Osterfeld
252feb3e2e653be1ef1292b92036f919bb990586c9Frank Osterfeld  if (bind (listen_fd, (struct sockaddr*) &addr, SUN_LEN (&addr)) < 0)
262feb3e2e653be1ef1292b92036f919bb990586c9Frank Osterfeld    {
272feb3e2e653be1ef1292b92036f919bb990586c9Frank Osterfeld      fprintf (stderr, "Abstract socket namespace bind() failed: %s\n",
282feb3e2e653be1ef1292b92036f919bb990586c9Frank Osterfeld                strerror (errno));
292feb3e2e653be1ef1292b92036f919bb990586c9Frank Osterfeld      exit (1);
302feb3e2e653be1ef1292b92036f919bb990586c9Frank Osterfeld    }
312feb3e2e653be1ef1292b92036f919bb990586c9Frank Osterfeld  else
322feb3e2e653be1ef1292b92036f919bb990586c9Frank Osterfeld    exit (0);
332feb3e2e653be1ef1292b92036f919bb990586c9Frank Osterfeld}