Jak sprawić, by nazwany potok nie był zajęty po rozłączeniu klienta?
Używam potoku nazwanego i chcę ponownie użyć tego samego potoku na serwerze, aby umożliwić połączenie innego klienta po odłączeniu oryginalnego klienta. To co robię to:
serwer tworzy potok używającCreateNamedPipe
serwer zapisuje dane za pomocąWriteFile
i ponawia próby, tak długo jak błądERROR_PIPE_LISTENING
jest zwracany (czyli przed podłączeniem dowolnego klienta)klienci łączą się za pomocąCreateFile
klient odczytuje daneklamka zamykająca klienta za pomocąCloseHandle
w tym momencie serwer otrzymuje błądERROR_NO_DATA
kiedy próbuje zapisać więcej danychserwer rozłącza rurę za pomocąDisconnectNamedPipe
, który miał nadzieję, że znów będzie wolnyserwer próbuje zapisać dane, dostaje błądERROR_PIPE_NOT_CONNECTED
, ponawia próbę, dopóki nie wystąpi błądjednak, gdy nowy klient łączy się i próbujeCreateFile
na rurzeERROR_PIPE_BUSY
Dlatego moje pytanie brzmi: jakie inne kroki muszę wykonać, aby poprawnie odłączyć klienta od potoku, aby nowy klient mógł się połączyć?