Unix Domain Socket: uso de comunicación de datagramas entre un proceso de servidor y varios procesos de clientes

Me gustaría establecer una conexión IPC entre varios procesos en Linux. Nunca he usado sockets UNIX antes, y por lo tanto no sé si este es el enfoque correcto para este problema.

Un proceso recibe datos (sin formato, binarios) y los distribuirá a través de un socket AF_UNIX local utilizando el protocolo de datagrama (es decir, similar a UDP con AF_INET). Los datos enviados desde este proceso a un socket local de Unix serán recibidos por varios clientes que escuchen en el mismo socket. El número de receptores puede variar.

Para lograr esto, el siguiente código se utiliza para crear un socket y enviarle datos (el proceso del 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);

Esta escritura devuelve -1 con errno que informa ENOTCONN ("El punto final de transporte no está conectado"). Supongo que esto se debe a que ningún proceso de recepción está escuchando este socket local, ¿correcto?

Luego, traté de crear un cliente que se conecta a este socket.

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);

Aquí, el enlace falla ("Dirección ya en uso"). Entonces, ¿necesito configurar algunas opciones de socket, o este es generalmente el enfoque incorrecto?

Gracias de antemano por cualquier comentario / solución!

Respuestas a la pregunta(7)

Su respuesta a la pregunta