¿Cómo crear Unix Domain Socket con permisos específicos en C?

Tengo un código simple, como:

sockaddr_un address;
address.sun_family = AF_UNIX;
strcpy(address.sun_path, path);
unlink(path);

int fd = socket(AF_UNIX, SOCK_STREAM, 0);
bind(fd, (sockaddr*)(&address), sizeof(address));
listen(fd, 100);

quieroatómicamente cree el archivo Unix Domain Socket con permisos específicos, por ejemplo:0777. El manual no dice nada sobre los permisos de archivos de socket con respecto aumask o lo que sea. Incluso si elumask Afecta el archivo de socket, entonces no es una forma atómica, en un programa de subprocesos múltiples.

Espero que haya una manera de lograr mi objetivo sin usar la sincronización deumask() llamadas

Respuestas a la pregunta(3)

Su respuesta a la pregunta