Не уверен, что понимаю трубку.Сервер вызывает ConnectNamedPipe для ожидания подключения клиента.Данные не нужно отправлять.Также он не может быть отправлен, вы не можете создать файл ReadFile, пока клиент не подключится.Обратите внимание, что образец SDK также использует это.
Если сервер отключается изящно (без уведомления клиента каким-либо сообщением, чтобы он мог закрыть свой конец канала), тогда клиент получит ошибку, ERROR_PIPE_NOTCONNECTED(Я думаю).Нет никаких оснований полагаться на то, что для нормального завершения работы вам нужно сделать что-то разумное, когда процесс сервера трубок неожиданно завершился сбоем и сгорел.
Остерегайтесь того, что каналы сложно исправить из-за их асинхронного характера.Получение ошибок, которые на самом деле не являются проблемами, является обычным явлением, и вам придется с этим справляться.Мой код канала обрабатывает следующие ошибки:
- ConnectNamedPipe: ERROR_PIPE_CONNECTED в гонке соединения, игнорировать
- FlushFileBuffers: гонка при закрытии трубы, игнорировать все ошибки
- WaitNamedPipe: ERROR_FILE_NOT_если время ожидания истекло, выполните преобразование в WAIT_TIMEOUT
- CreateFile: ERROR_PIPE_BUSY, если другому клиенту сначала удалось получить канал, повторите