У меня есть эта часть кода, которая представляет собой простой сервер труб. Когда я устанавливаю атрибут PIPE_NOWAIT, а затем пытаюсь подключиться к нему с клиентом с помощью функции CreateFile - ничего не происходит, мы все еще находимся во втором блоке. Когда я удаляю флаг PIPE_NOWAIT - мы входим в функцию ConnectNamedPipe и после того, как CreateFile был вызван от клиента, мы попадаем в первый блок, что означает, что мы преуспели. Почему так?PIPE_NOWAIT breaks connetion
HANDLE hPipe;
std::string msg;
DWORD dwRead;
hPipe = CreateNamedPipe(L"\\\\.\\pipe\\Pipe100500",
PIPE_ACCESS_DUPLEX, // FILE_FLAG_FIRST_PIPE_INSTANCE is not needed but forces CreateNamedPipe(..) to fail if the pipe already exists...
PIPE_TYPE_MESSAGE | PIPE_READMODE_MESSAGE | PIPE_NOWAIT,
1,
1024 * 16,
1024 * 16,
NMPWAIT_USE_DEFAULT_WAIT,
NULL);
while (true)
{
if (ConnectNamedPipe(hPipe, NULL) != FALSE)
{
// Waiting in the ConnectNamedPipe and then we are here
}
else
{
// always here when PIPE_NOWAIT
}
}
почему вы используете 'PIPE_NOWAIT'? вам нужно использовать 'FILE_FLAG_OVERLAPPED' – RbMm
Почему я не могу это сделать? – banana36
'PIPE_NOWAIT' -'Примечание о том, что неблокирующий режим поддерживается для совместимости с Microsoft LAN Manager версии 2.0 и не должен использоваться для достижения асинхронного ввода-вывода с именованными каналами.' Если вы хотите асинхронный ввод-вывод - используйте 'FILE_FLAG_OVERLAPPED' – RbMm