Stiamo provando a connettere due VM Hyper-V tramite una porta seriale. Hyper-V espone la porta seriale come una named pipe al sistema host e implementa il server end della named pipe. Di conseguenza, per collegarli, è necessario scrivere un client named pipe che si connetta a entrambe le macchine virtuali e copia i dati avanti e indietro.Hyper-V: il collegamento di macchine virtuali tramite named pipe perde i dati
We have written such an application. Purtroppo, questa applicazione perde i dati.
Se colleghiamo due estremi e li scambiamo dati, la trasmissione a volte ha esito positivo, ma in molti casi, la ricezione riceve errori o la trasmissione si blocca. Allo stesso modo, se usiamo il link per eseguire un debugger del kernel, sembra che si blocchi spesso.
Quale potrebbe essere la causa della perdita di dati? Quali precauzioni devono essere prese quando si collegano le pipe denominate in questo modo?
Modifica: Abbiamo risolto il problema utilizzando kdsrv.exe. La porta COM del debugge continua a essere esposta attraverso una named pipe, tuttavia, l'end debugger parla con kdserv via TCP.
Grazie per il suggerimento. Limitare l'inoltro aiuta un po '; un semplice "copia foo.txt COM1:" può ora trasmettere correttamente tutti i dati. Sfortunatamente, HyperTerm è ancora in deadlock nella comunicazione zmodem, quindi ci deve essere ancora una perdita di dati da qualche parte. Per quanto riguarda ResetEvent: dove manca in particolare? Async IO è definito per reimpostare correttamente gli eventi in ReadFile e WriteFile. Testerà reset = 0 domani. –
My misteake. Non c'è bisogno di ResetEvent. – John
Questa risposta non risolve completamente il problema, solo parzialmente. Eppure, è la migliore risposta che abbiamo, quindi la premo con la taglia. Vedi la mia modifica per come abbiamo risolto il problema. –