Einstellung socket senden/empfangen-timeout auf weniger als 500ms in .NET
Laut MSDN-Dokumentation ist es nicht möglich, set-Buchse.SendTimeout auf einen Wert von weniger als 500ms: http://msdn.microsoft.com/en-us/library/system.net.sockets.socket.sendtimeout Gleiche Regel gilt auch für die Buchse.ReceiveTimeout (auch wenn es nicht erwähnt wird in der MSDN-Dokumentation, dies ist wahr, da in beiden Fällen wurden praktisch getestet).
Gibt es andere Möglichkeiten, um Timeouts einer socket receive-operation, wenn es, zum Beispiel, dauert länger als 10ms zu vervollständigen?
- Was ist falsch mit der Einstellung
Socket.ReceiveTimeout
auf 10ms? - Überprüfen Sie in diesem stackoverflow.com/questions/9327326/socket-receivetimeout
- Ich habe einen test mit Sockel.ReceiveTimeout-set bis 10m. Alle scheiterten nach etwa 500ms, also ich nehme an, die gleiche Regel gilt auch hier auch es wird nicht erwähnt in der Dokumentation.
- ja, aber es spinnt einen neuen Faden.
- Warum würden Sie wollen, dass ein timeout weniger als 500ms? Mit Latenz und Potenzial, Netzwerk-traffic, sehr viel geringer als 500 MS und Sie haben das Potenzial, eine Menge von falschen timeouts.
Du musst angemeldet sein, um einen Kommentar abzugeben.
Ist die einfache Antwort, "du nicht".
Send()
undReceive()
Anrufe blockieren den Fluss des Programms, bis Daten gesendet, empfangen oder ein Fehler aufgetreten ist.Wenn Sie wollen mehr Kontrolle über Ihre Anrufe, gibt es mehrere Mechanismen zur Verfügung. Die einfachste ist die Verwendung
Poll()
.Können Sie auch
Select()
,BeginReceive()
oderReceiveAsync()
für andere Arten von Verhaltensweisen.Empfehle ich Ihnen die Lektüre Stevens' UNIX Network Programming Kapitel 6 und 16 weitere in-depth information on non-blocking-socket-Nutzung. Obwohl das Buch hat UNIX in seinem Namen, ist das gesamte buchsen-Architektur ist im wesentlichen die gleiche in UNIX und Windows (und .net)