In einigen Fällen möchte ich Pakete, die auf den Socket warten, mit möglichst wenig Overhead explizit verwerfen. Es scheint, dass es keinen expliziten "Drop Udp Buffer" Systemaufruf gibt, aber vielleicht liege ich falsch?Einfallendes UDP-Paket ohne Lesen löschen
Der nächste beste Weg wäre wahrscheinlich zu recv
das Paket in einen temporären Puffer und einfach fallen lassen. Es scheint, ich kann 0 Bytes nicht empfangen, da man sagt über recv
: The return value will be 0 when the peer has performed an orderly shutdown.
Also 1 ist das Minimum in diesem Fall.
Gibt es einen anderen Weg, damit umzugehen?
Nur für den Fall - das ist keine vorzeitige Optimierung. Das einzige, was dieser Server macht, ist das Weiterleiten/Versenden der UDP-Pakete in einer bestimmten Weise - obwohl recv
mit len=1
mich nicht umbringt, würde ich lieber die ganze Warteschlange auf einmal mit einer spezifischeren Funktion verwerfen (hoffentlich die Latenz).
Welche Kriterien verwenden Sie, um zu entscheiden, was zu verwerfen ist? –
Nicht sicher, was ich hier sagen kann, also macht es Sinn ... im Grunde kündigen zwei Seiten (mit einem geteilten Cookie) an, dass sie einen Proxy benötigen. Der Server muss den Socket nach der ersten Anfrage öffnen, um sicherzustellen, dass der Port von niemandem benutzt wird. Bis das Setup abgeschlossen ist, muss ich Pakete löschen, sonst werden sie in die Warteschlange gestellt und später erneut gesendet - das ist eine sehr schlechte Sache in meinem Szenario. Also im Grunde habe ich eine interne Flagge für jede Verbindung, die sagt - alles fallen lassen oder alles weiterleiten. – viraptor