| Предыдущий | Следующий |
| ERROR_PIPE_BUSY | ERROR_PIPE_NOT_CONNECTED |
ERROR_NO_DATA
ERROR_NO_DATA является результатом состояния именованного канала, смысл которого зависит от вызова API и режима канала. Часто он означает, что операция сейчас не может продолжаться, поскольку отсутствуют доступные данные или подключённый клиент.
Чтение из неблокирующего канала
Для именованного канала в неблокирующем режиме ожидания ReadFile может вернуть ERROR_NO_DATA когда буфер канала пуст. Это не обязательно означает сбой соединения; это значит, что блокирующему чтению пришлось бы ждать другого писателя.
Случай жизненного цикла соединения
ConnectNamedPipe также может вернуть этот код, когда предыдущий клиент закрыл свой дескриптор, а сервер ещё не вызвал DisconnectNamedPipe. В этом случае сервер должен завершить жизненный цикл прежнего соединения, прежде чем повторно использовать экземпляр канала для нового клиента.
Не используйте PIPE_NOWAIT как цикл обработки событий
Постоянный опрос неблокирующего именованного канала расходует CPU и может скрывать ошибки состояния соединения. Для асинхронных серверов используйте перекрывающийся ввод-вывод и уведомления о завершении, а не воспринимайте ERROR_NO_DATA как повод для активного цикла повторов.
См. документацию Microsoft по тип, режим чтения и режим ожидания именованного канала и ConnectNamedPipe.
Нужно найти другой код? Найти другой код состояния или ошибки.