¿Cómo hacer que una tubería con nombre no esté ocupada después de que el cliente se haya desconectado?
Utilizo una canalización con nombre y quiero reutilizar la misma tubería en el servidor para permitir la conexión de otro cliente una vez que el cliente original se haya desconectado. Lo que hago es:
servidor crea una tubería utilizandoCreateNamedPipe
el servidor escribe datos usandoWriteFile
, y vuelve a intentarlo siempre y cuando el errorERROR_PIPE_LISTENING
es devuelto (que es antes de que cualquier cliente se conecte)clientes se conecta usandoCreateFile
el cliente lee los datosusando la manija del tubo de cierreCloseHandle
en este punto el servidor recibe un errorERROR_NO_DATA
cuando intenta escribir mas datosservidor desconecta el tubo utilizandoDisconnectNamedPipe
, que esperaba que fuera libre de nuevoservidor intenta escribir datos, obtiene errorERROR_PIPE_NOT_CONNECTED
, vuelve a intentarlo hasta que no haya ningún errorsin embargo, cuando el nuevo cliente se conecta, e intentaCreateFile
en la tubería, se poneERROR_PIPE_BUSY
Por lo tanto, mi pregunta es: ¿qué otros pasos debo seguir para desconectar al cliente de la tubería de manera adecuada para que un nuevo cliente pueda conectarse?