Estamos intentando conectar dos máquinas virtuales Hyper-V a través de un puerto en serie. Hyper-V expone el puerto serie como una tubería con nombre al sistema host, e implementa el extremo del servidor de la tubería con nombre. En consecuencia, para conectarlos, necesitamos escribir un cliente de canalización con nombre que se conecte a ambas máquinas virtuales y copie los datos hacia adelante y hacia atrás.Hyper-V: la conexión de máquinas virtuales a través de un conducto con nombre pierde los datos
We have written such an application. Desafortunadamente, esta aplicación pierde datos.
Si conectamos dos hyperterms y hacemos que intercambien datos, la transmisión a veces tiene éxito, pero en muchos casos, el extremo receptor informa errores, o la transmisión simplemente bloquea. Del mismo modo, si utilizamos el enlace para ejecutar un depurador de kernel, también parece colgarse con frecuencia.
¿Cuál podría ser la causa de la pérdida de datos? ¿Qué precauciones se deben tomar al conectar los tubos con nombre de esa manera?
Editar: Hemos trabajado todo el problema, utilizando kdsrv.exe. El puerto COM del depurador sigue estando expuesto a través de un conducto con nombre, sin embargo, el extremo del depurador se comunica con kdserv a través de TCP.
Gracias por la sugerencia. Estrangular el reenvío ayuda un poco; un simple "copy foo.txt COM1:" ahora puede transmitir con éxito todos los datos. Desafortunadamente, HyperTerm sigue bloqueándose en la comunicación zmodem, por lo que aún debe haber pérdida de datos en alguna parte. En cuanto a ResetEvent: ¿dónde falta específicamente? Async IO se define para reiniciar los eventos correctamente en ReadFile y WriteFile. Se restablecerá la prueba = 0 mañana. –
Mi misteake. No hay necesidad de ResetEvent. – John
Esta respuesta no resuelve completamente el problema, solo parcialmente. Aún así, es la mejor respuesta que tenemos, así que le estoy otorgando la recompensa. Ver mi edición de cómo trabajamos alrededor del problema. –