I have a simple c# win forms app acting as a "collector" for syslog messages.
(我有一个简单的C#Win Forms应用程序,充当syslog消息的“收集器”。)
This is a snipit of the code in question. (这是有关代码的伪装。)
This code "works fine" on a win7 and server 2019 machine in that the call to udplistener.receive blocks when there is nothing to receive (at least I thought that was how it was supposed to work ;) But on a win7 hyperv vm and a server 2016 hyperv vm it doesn't block? (这段代码在win7和server 2019机器上运行良好,因为在没有接收内容的情况下,对udplistener.receive的调用会阻塞(至少我认为那是应该的工作方式;)但是在win7 hyperv vm和服务器2016 hyperv vm它不会阻止?)
It "receives" the same data infinitely. (它无限地“接收”相同的数据。)
I'm thinking its not clearing the buffer, so I added the debug prints, sure enough the second debug print is zero on "working" systems, but indeed is non zero on the systems that don't block. (我认为它没有清除缓冲区,因此我添加了调试打印,确保第二个调试打印在“正常”系统上为零,但在不阻塞的系统上确实为非零。)
I'm doing some more troubleshooting, not 100% sure its related to the VM's, wondering if others have seen similar? (我正在做更多的故障排除,不是100%地确定其与VM有关,想知道其他人是否也看到了类似的故障?)
Is there a reason a VM would handle this differently? (VM是否有不同的处理方式?)
MessageInfo("DEBUG: available before .Receive " + udpListener.Available.ToString());
bReceive = udpListener.Receive(ref anyIP);
MessageInfo("DEBUG: available after .Receive " + udpListener.Available.ToString());
thanks ben
(谢谢本)
ask by bbad translate from so 与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…