Мне нужен сокет (или другой метод IPC) со следующим поведением:
Автор должен иметь возможность отправить
данные в сокет без блокировки
если никто не слушает,
данные отбрасываются
как обычно, читатель должен уметь
подключить и получить эти данные
Что я сделал:
создал носок, вызвав
sock = socket (PF_LOCAL, SOCK_DGRAM, 0); //sock is an integer
связал его с
struct sockaddr_un name;
memset(&name,0,sizeof(struct sockaddr_un));
name.sun_family = AF_LOCAL;
strncpy (name.sun_path, filename, sizeof (name.sun_path)); //filename contains "/cosmos"
bind (sock, (struct sockaddr *) &name, sizeof(struct sockaddr_un));
затем сделал опрос на нем
struct pollfd pld;
pld.events = POLLOUT;
pld.fd = sock;
pld.revents=0;
//in loop
poll(&pld,1,50);
if(pld.revents & POLLOUT)
write(fr,mydata,19);
Отслеживание выводит, что запись выполняется (многократно).
Чтобы прослушать это я сделал:
struct sockaddr_un cos_name;
int cosmos;
char buffer[100];
memset(&cos_name,0,sizeof(struct sockaddr_un));
strncpy (cos_name.sun_path, COSMOS_SOCKET, sizeof (cos_name.sun_path));
memset(buffer,0,100);
cosmos = socket (PF_LOCAL, SOCK_DGRAM, 0);
//check on cosmos being 0
if (connect(cosmos,(struct sockaddr*) &cos_name, sizeof(struct sockaddr_un)) != 0)
{
printf("Connecting failed: %s.\n",strerror(errno));
return;
}
printf("Listening successfully started.\n");
//loop
{
read(cosmos,buffer,100);
printf("Recieved: %s.\n",buffer);
}
Однако «Получено ...» никогда не печатается.
Что необходимо изменить для достижения желаемой функциональности?
Каким должно быть предложение в последнем цикле? (Я использую простое «запустить 1000 раз сейчас»).