Tatsächlich scheint es, dass UdpClient
gebrochen ist, wenn es um Timeouts kommt. Ich habe versucht, einen Server mit einem Thread zu schreiben, der nur einen Receive enthält, der die Daten erhalten und zu einer Warteschlange hinzugefügt hat. Ich habe diese Art von Dingen seit Jahren mit TCP gemacht. Die Erwartung ist, dass die Schleife beim Empfang blockiert, bis eine Nachricht von einem Anforderer eintrifft. Doch trotz Einstellung des Timeout auf unendlich:
_server.Client.ReceiveTimeout = 0; //block waiting for connections
_server.Client.SetSocketOption(SocketOptionLevel.Socket, SocketOptionName.ReceiveTimeout, 0);
die Buchse Timeout nach ca. 3 Minuten.
Die einzige Problemumgehung, die ich gefunden habe, war, die Timeout-Ausnahme zu fangen und die Schleife fortzusetzen. Dies verbirgt den Microsoft-Fehler, aber versäumt, die grundlegende Frage zu beantworten, warum dies geschieht.
Danke für die Antwort. – Jack
Das war vor langer Zeit! Das sieht jetzt gut aus. WaitOne gibt auch ein Ergebnis zurück, mit dem Sie feststellen können, ob das Zeitlimit überschritten wurde. – weston