Итак, у меня есть два процесса. Каждый из них создает свою очередь сообщений и пытается подключиться друг к другу. Однако по какой-то причине это работает только в одном направлении.
Процесс один имеет следующее:
struct mq_attr attr;
int flags = O_RDWR | O_CREAT;
attr.mq_flags = 0;
attr.mq_maxmsg = 3; // ***
attr.mq_msgsize = sizeof(cache_request);
attr.mq_curmsgs = 0;
mqd_t fd, fd2;
mq_unlink("/mq_one");
fd2 = mq_open("/mq_two", flags,(S_IRUSR | S_IWUSR | S_IRGRP | S_IROTH),&attr );
while((fd = mq_open("/mq_one", O_RDWR)) == -1){
printf("Couldnt connect to message queue in cache\n");
sleep(2);
}
mq_close(fd2);
mq_unlink("/mq_two");
printf("connected to message queue.\n");
Процесс два имеет следующее:
mqd_t fd, fd2;
//mq_unlink("/mq_one");
struct mq_attr attr;
int flags = O_RDWR | O_CREAT;
attr.mq_flags = 0;
attr.mq_maxmsg = 3; // ***
attr.mq_msgsize = sizeof(cache_request);
attr.mq_curmsgs = 0;
fd = mq_open("/mq_one", flags,(S_IRUSR | S_IWUSR | S_IRGRP | S_IROTH),&attr );
printf("opened message queue /mq_one.\n");
if (fd < 0) {
printf (" Error %d (%s) on server mq_open.\n",errno, strerror (errno));
mq_close(fd);
mq_unlink("/mq_one");
exit (1);
}
while((fd2 = mq_open("/mq_two", O_RDWR)) == -1){
printf("waiting on webproxy...\n");
sleep(2);
}
mq_close(fd2);
mq_unlink("/mq_two");
По существу, каждый процесс открывает (создает) свою собственную очередь сообщений, а затем ожидает другого при попытке установить соединение. Проблема в том, что это работает, только если процесс запускается раньше, чем процесс два, а не наоборот. Если я сначала запускаю процесс 2, то когда я запускаю процесс 1, процесс 2 выходит из l oop и продолжает работать, но процесс 1 остается в l oop, даже если он должен видеть первую очередь сообщений. Я не могу понять, почему это так.