Local Socket Example (The GNU C Library)

#### 16.5.3 Example of Local-Namespace Sockets ¶

Here is an example showing how to create and name a socket in the local namespace.

    #include <stddef.h>
    #include <stdio.h>
    #include <errno.h>
    #include <stdlib.h>
    #include <string.h>
    #include <sys/socket.h>
    #include <sys/un.h>

    int
    make_named_socket (const char *filename)
    {
      struct sockaddr_un name;
      int sock;
      size_t size;

      /* Create the socket. */
      sock = socket (PF_LOCAL, SOCK_DGRAM, 0);
      if (sock < 0)
        {
          perror ("socket");
          exit (EXIT_FAILURE);
        }

      /* Bind a name to the socket. */
      name.sun_family = AF_LOCAL;
      strncpy (name.sun_path, filename, sizeof (name.sun_path));
      name.sun_path[sizeof (name.sun_path) - 1] = '\0';

      /* The size of the address is
         the offset of the start of the filename,
         plus its length (not including the terminating null byte).
         Alternatively you can just do:
         size = SUN_LEN (&name);
     */
      size = (offsetof (struct sockaddr_un, sun_path)
              + strlen (name.sun_path));

      if (bind (sock, (struct sockaddr *) &name, size) < 0)
        {
          perror ("bind");
          exit (EXIT_FAILURE);
        }

      return sock;
    }