Como criar Unix Domain Socket com permissões específicas em C?

Eu tenho um código simples, 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);

eu queroatomicamente crie o arquivo Unix Domain Socket com permissões específicas, digamos:0777. O manual não diz nada sobre permissões de arquivo de soquete em relação aumask como queiras. Mesmo se oumask afeta o arquivo de soquete, então não é uma maneira atômica - no programa multi-threaded.

Espero que haja uma maneira de atingir meu objetivo sem usar a sincronização deumask() chamadas.

questionAnswers(3)

yourAnswerToTheQuestion