Soquete de domínio Unix: usando comunicação de datagrama entre um processo do servidor e vários processos do cliente

Eu gostaria de estabelecer uma conexão IPC entre vários processos no Linux. Eu nunca usei soquetes UNIX antes e, portanto, não sei se essa é a abordagem correta para esse problema.

Um processo recebe dados (não formatado, binário) e deve distribuir esses dados por um soquete AF_UNIX local usando o protocolo de datagrama (ou seja, semelhante ao UDP com AF_INET). Os dados enviados deste processo para um soquete Unix local devem ser recebidos por vários clientes ouvindo no mesmo soquete. O número de receptores pode variar.

Para conseguir isso, o código a seguir é usado para criar um soquete e enviar dados para ele (o processo do servidor):

struct sockaddr_un ipcFile;
memset(&ipcFile, 0, sizeof(ipcFile));
ipcFile.sun_family = AF_UNIX;
strcpy(ipcFile.sun_path, filename.c_str());

int socket = socket(AF_UNIX, SOCK_DGRAM, 0);
bind(socket, (struct sockaddr *) &ipcFile, sizeof(ipcFile));
...
// buf contains the data, buflen contains the number of bytes
int bytes = write(socket, buf, buflen);
...
close(socket);
unlink(ipcFile.sun_path);

Essa gravação retorna -1 com o relatório de erro ENOTCONN ("O terminal de transporte não está conectado"). Acho que é porque nenhum processo de recebimento está ouvindo esse soquete local, correto?

Então, tentei criar um cliente que se conecta a esse soquete.

struct sockaddr_un ipcFile;
memset(&ipcFile, 0, sizeof(ipcFile));
ipcFile.sun_family = AF_UNIX;
strcpy(ipcFile.sun_path, filename.c_str());

int socket = socket(AF_UNIX, SOCK_DGRAM, 0);
bind(socket, (struct sockaddr *) &ipcFile, sizeof(ipcFile));
...
char buf[1024];
int bytes = read(socket, buf, sizeof(buf));
...
close(socket);

Aqui, a ligação falha ("Endereço já em uso"). Então, preciso definir algumas opções de soquete ou essa geralmente é a abordagem errada?

Agradecemos antecipadamente por quaisquer comentários / soluções!