Именованные трубы (named pipe) в Windows. Две программы работают друг с другом через них. Вдруг на одном из компов после прохождения пары запросов (они прошли нормально) клиентская часть докладывает, что процесс на том конце трубы отсутствует. Постойте -- как отсутствует? Вот же он, работает!

Выяснилось, что ошибка возникает при вызове функции PeekNamedPipe. Ошибка 233.

Я говорю товарищу, который писал серверную часть (а я писал клиентскую) -- давай проверим, что труба ещё работает. GetNamedPipeHandleState. Он пишет вызов. Вызов делается регулярно в моменты простоя процесса (OnIdle). Вызов возвращает FALSE! GetLastError возвращает 87 (неверный параметр; ненавижу эту ошибку, т.к. непонятно, что она значит). Но! Труба перестаёт отваливаться! То есть: добавление неработающей проверки состояния приводит к тому, что то, что раньше не работало, начало работать. Вот оно -- наблюдатель изменяет явление!

Потом вызов был переделан, чтобы он проходил успешно, но это уже ничего не изменило.

Я бы подумал, что серверная часть закрывает трубу по таймауту, однако ещё одна программа-сервер, написанная с помощью того же класса-обёртки, работает нормально, хотя она данные пересылает ещё реже, чем 1-я. И эта на других компах тоже работала!