Проблема с Mailslot
Создаю почтовый ящик в 1 процессе
Код:
HANDLE hMailslot = CreateMailslot((LPSTR)_mailslot_name, 0, MAILSLOT_WAIT_FOREVER, NULL);
Открываю его во втором процессе и записываю данные
Код:
HANDLE hMslot=CreateFile(_mailslot_name, GENERIC_WRITE, FILE_SHARE_READ, NULL, OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL, NULL);
WriteFile(g_hMslot, send_buf, cbSize,&cbWritten, NULL);
WriteFile(g_hMslot, send_buf, cbSize,&cbWritten, NULL);
Принимаю в процессе
Код:
if (GetMailslotInfo(hMailslot, NULL,&cbMessages, &lpMessageCount, NULL) == TRUE) {
if (cbMessages != MAILSLOT_NO_MESSAGE) {
ReadFile(hMailslot,recv_buf, cbMessages, &cbRead, NULL);
}
}
if (cbMessages != MAILSLOT_NO_MESSAGE) {
ReadFile(hMailslot,recv_buf, cbMessages, &cbRead, NULL);
}
}
Проблема в том, что lpMessageCount=3, то есть я послал 1 сообщение, а пришло 3 абсолютно одинаковых?! Цикла отправки нет, отправляется только 1 раз, и процесс 2го типа только 1. Целый день сижу не могу понять как так, одна WriteFile, пишет сразу 3 копии, и почему именно 3... Может что то с флагами напутал. Может подскажет кто то идею, буду благодарен.
если отправляю по локальному имени
Код:
\\\\.\\mailslot\\_mailslot_1
все отлично - 1 сообщение
если через имя компьютера
Код:
\\\\BEST-RVHY1BPDDW\\mailslot\\_mailslot_1
отправляется 3 копии!!!
мне нужно посылать имено на другой компьютер в сети, а такое дублирывание совсем не к чему...
все разобрался, это было из за трех сетевых подключений, отключил привязку протокола у 2х их них, теперь все ок, по 1му сообщению.