Jak naprawić błąd Rura niepodłączona 233 (0xE9)
ERROR_PIPE_NOT_CONNECTED to częsty problem, na który napotykają deweloperzy, zwykle z komunikatem 233 (0xE9) informującym, że żaden proces nie jest podłączony do potoku. Jeśli napotkasz ten błąd, ten artykuł zawiera kilka rozwiązań, aby skutecznie go rozwiązać.
Jakie kroki mogę podjąć, aby rozwiązać problem z błędem ERROR_PIPE_NOT_CONNECTED?
1. Zmodyfikuj swój kod
- Uzyskaj dostęp do plików z kodem.
- Potwierdź, że zdefiniowałeś to
PIPE_NOWAIT
w swoim kodzie. - Zaimplementuj to w swoim kodzie w następujący sposób:
DWORD mode = PIPE_NOWAIT;SetNamedPipeHandleState(_callstackPipe,&mode,NULL,NULL);ConnectNamedPipe(_callstackPipe,NULL);mode = PIPE_WAIT;SetNamedPipeHandleState(_callstackPipe,&mode,NULL,NULL);
- Zapisz zmiany.
2. Wdróż ConnectNamedPipe
- Przejrzyj swój kod.
- Jeśli podczas korzystania z ReadFile pojawi się komunikat ERROR_PIPE_NOT_CONNECTED, oznacza to, że połączenie po stronie zdalnej zostało utracone.
- W takiej sytuacji należy rozważyć użycie funkcji ConnectNamedPipe bez początkowego wywoływania funkcji DisconnectNamedPipe .
3. Zintegruj wątek nasłuchujący po ConnectNamedPipe()
- Otwórz edytor kodu.
- Zmodyfikuj swoją implementację, aby uwzględnić wątek nasłuchujący, umożliwiający kolejne połączenie klienta, jak pokazano poniżej:
Main Thread{ CreateListenerThread(); WaitForQuitEvent();}ListenerThread{ ConnectNamedPipe(); if (success) { CreateListenerThread(); if(PeekNamedPipe() detects a message) { ReadFile(); ProcessReceivedMessage(); // if a -quit signal is detected, trigger quit event } FileFlushBuffers(); DisconnectNamedPipe(); CloseHandle(); } else { // manage/report error }}
- Pamiętaj, aby zapisać zmiany.
4. Aktywuj dziedziczenie
- Uzyskaj dostęp do plików z kodem.
- Dodaj następujący wiersz:
BOOL res = SetHandleInformation(hPipe, HANDLE_FLAG_INHERIT, HANDLE_FLAG_INHERIT);
- Zapisz te aktualizacje.
Ta zmiana umożliwi dziedziczenie uchwytu, co potencjalnie rozwiąże problem.
Dodaj komentarz